Sonntag, 12. Februar 2012


Artikel

März 2010 | Artikel

jWebSocket statt XHR und Comet?

(Link zum Artikel: http://www.entwickler.de/jaxenter/artikel/2904)

Ein Überblick

Text: Alexander Schulze
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Googles Chrome 4 ist der erste Browser, der HTML 5 WebSockets unterstützt – weitere folgen. Im Gegensatz zu XHR und Comet sind WebSockets bidirektional und ressourcensparend, und perfekt geeignet für Server-to-Client Streaming (S2C) und Client-to-Client Communication (C2C) – für Ticker, Chats, Online-Collaboration oder Gaming-Anwendungen. Auf jWebSocket.org steht diese neue Technologie als GPL-Open-Source-Bibliothek bereit.
Teil 1   Teil 2   

jWebSocket ist ein High-Speed-Java-Kommunikationsserver für HTML5-Webs mit einem JavaScript-Client ohne spezielle Third-Party-Plug-ins. Ein Java-Client für Desktopapplikationen z. B. in Swing erscheint im März. Der Server, ein simples .jar-File, kann standalone oder als Dienst betrieben sowie in Webapplikationen unter Tomcat, JBoss, GlassFish oder Jetty integriert werden. Für die Clientseite ist lediglich eine einzelne .js-Datei erforderlich.

Enthalten sind die WS-Protokollimplementierung, Sessionmanagement und Authentifizierung sowie Connectoren für JSON, CSV und XML. Zusätzlich ein Streaming API, Remote Procedure Calls (RPC) und ein Plug-in-Modell für eigene Businesslogik. Für Enterprise-Anwendungen können mehrere Server zu einem Cluster verbunden werden.

Vorteile von WebSockets

Die Verwendung von TCP löst nicht nur den aus XHR und Comet bekannten Request/Response-Zwang ab, sondern es entfällt auch der HTTP-Overhead. Das bewirkt kürzere Latenz und mehr verfügbare Bandbreite. Während beim HTTP-Streaming zwei Kanäle belegt werden, bieten WebSockets echtes Full-Duplex auf einem einzigen TCP Socket. Ein WS-Server kann daher doppelt so viele gleichzeitige Verbindungen verwalten.

Auf dem Client bietet HTML 5 standardisierte Events, um eingehende Datenpakete oder den Auf- und Abbau einer Verbindung zu verarbeiten. Umständliche und browserspezifische Polling- oder Buffering-Mechanismen entfallen. Eine Übersicht, welche Browser WebSockets unterstützen, und eine WS-basierte Chatapplikation finden Sie auf jWebSocket.org.

Handshake

Wie bei XHR muss auch der WebSocket-Client die Verbindung zum Server aufbauen. Jedoch wird diese nach Austausch eines Handshakes im Gegensatz zu HTTP per Spezifikation aufrechterhalten. Für einen WebSocket-Server initiiert der Client statt mit http über das neue Schema ws://domain.tld:port/path?arguments die Verbindung. Der Client sendet einen Header in folgender Form:

  1. GET <path> HTTP/1.1
  2. Upgrade: WebSocket
  3. Connection: Upgrade
  4. Host: <hostname>:<port>
  5. Origin: http://<host>[:<port>]

Den der Server wie folgt beantwortet:

  1. HTTP/1.1 101 Web Socket Protocol Handshake
  2. Upgrade: WebSocket
  3. Connection: Upgrade
  4. WebSocket-Origin: http://<hostname>[:<port>]
  5. WebSocket-Location: ws://<hostname>:<port>/

Anschließend können beide Parteien über einen einzigen Socket-Kanal bidirektional Daten austauschen. Der Handshake dient in erster Linie Sicherheitsaspekten, um z. B. Cross-Domain-Zugriffe zu kontrollieren.

Tokens

Grundsätzlich können Client und Server nun beliebige Datenpakete austauschen, jWebSocket stellt für eigene Protokolle entsprechende Low-Level-Klassen bereit. Um Pakete jedoch für beide Seiten leicht interpretierbar zu halten, implementiert die darüber liegende Protokollschicht so genannte Tokens. Auf dem Server sind dies Java-Objekte, nach außen wahlweise JSON-, CSV- oder XML-Pakete. Tokens können in beide Richtungen ausgetauscht, verarbeitet und beantwortet werden. Für Streaming-Anwendungen unterstützt jWebSocket so genannte One-Way-Token, bei denen der Absender keine Rückmeldung vom Empfänger erwartet.

Teil 1   Teil 2   

Kommentare