Das neue WebSockets API in Jetty 9

Hartmut Schlosser

Wenn es um die Implementierung von WebSockets geht, dem Netzwerkprotokoll für die bidirektionale Kommunikation zwischen Webanwendung und Webserver, dann ist der Servlet-Container Jetty stets an vorderster Front. Das Eclipse-Projekt aus dem Hause Webtide hat bereits seit 2009 den WebSocket-Support mit an Bord – noch vor der Fertigstellung des ersten WebSocket-Protokolls. Mittlerweile steht das Release von Jetty 9 an. Und das WebSocket API hat jetzt im Vergleich zur „Milestone-0-Version“ nochmals eine gehörige Portion Feinschliff erhalten.

Das neue WebSockets API im Jetty 9.x-Entwicklungszweig auf Git zeigt Vereinfachungen, die damit zusammenhängen, dass die alten I/O Layer mit ihrer komplizierten Logik ad acta gelegt wurden. Resultat ist ein neuer Jetty Core, der auf einem neuen, asynchronen I/O-Modell basiert. Jetty selbst wurde dadurch schlanker und einfacher zu warten, obendrein konnten Performance-Gewinne und eine günstigere Speicherauslastung erreicht werden.

Jetty 9.x verliert allerdings die Abwärtskompatibilität zu früheren Jetty-Versionen. Benötigt wird nun Java 7, die unterstützte WebSocket-Spezifikation ist die im RFC-6455 festgeschriebene Version 13. Das einst monolithisch angelegte jetty-websocket Artefakt wurde in verschiedene Komponenten aufgesplittet, sodass sich jeder Entwickler seine persönlichen Rosinen aus dem Jetty-Paket herauspicken kann.

Im Einzelnen sind dies:

  • websocket-core.jar (die grundlegenden API-Klassen und interne Implementierungsdetails, die Server und Client gemein sind).
  • websocket-server.jar (Server-spezifische Klassen)
  • websocket-client.jar (Client-spezifische Klassen)

Wie Jetty-Entwickler Joakim Erdfelt auf dem Webtide-Blog beschreibt, hat die Praxis gezeigt, dass Jetty-User nicht mit WebSocket Frames arbeiten. Der Fokus wurde deshalb ganz auf Messages gelegt. Zu beachten ist zudem, dass mit WebSocketListener nur noch ein Listener existiert. Unterstützt werden in Jetty 9 annotierte WebSocket-Klassen.

Diese Änderungen in Jetty 9.x seien das Resultat der wachsenden Erfahrung mit dem WebSocket-Standard, sagt Erdfelt – bei einem neuen Standard müssen sich Best Practices eben erst noch herauskristallisieren. In Jetty 7.x und 8.x seien denn auch einige Wege beschritten worden, die sich im Nachhinein als Sackgassen erwiesen hätten. Mit Jetty 9.x habe man nun die Gelegenheit ergriffen, die Fehler zu bereinigen.

Erdfelt stellt die neuen Möglichkeiten mit Jetty 9 in einem Beispiel auf dem Jetty-Blog vor, darunter auch in der Variante POJO plus @WebSocket-Annotationen.

Angepeilter Veröffentlichungstermin für Jetty 9 ist Novemver 2012. Auf der Roadmap für zukünftige Jetty-Erweiterungen stehen nun Mux Extensions, Streaming APIs, eine Android kompatible Client Library und der Support für das Java API for WebSocket API (JSR356).

Geschrieben von
Hartmut Schlosser
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.