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:
GET <path> HTTP/1.1Upgrade: WebSocketConnection: UpgradeHost: <hostname>:<port>Origin: http://<host>[:<port>]
Den der Server wie folgt beantwortet:
HTTP/1.1 101 Web Socket Protocol HandshakeUpgrade: WebSocketConnection: UpgradeWebSocket-Origin: http://<hostname>[:<port>]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.




