WebSocket-Bibliothek Java: Tyrus — Referenzimplementierung von JSR 356
Im modernen Webentwicklung ist der Bedarf an bidirektionaler Echtzeitkommunikation zum Standard geworden. Chat-Anwendungen, Online-Spiele, Handelsplattformen und Benachrichtigungssysteme – sie alle erfordern, dass der Server Daten an den Client senden kann, ohne ständige HTTP-Anfragen. Für das Java-Ökosystem ist die Spezifikation JSR 356 (Java API for WebSocket) der De-facto-Standard, und ihre Referenzimplementierung ist die Bibliothek Tyrus.
Auf der Seite pythonlib.ru betrachten wir oft Werkzeuge für die Echtzeitkommunikation. Heute werden wir Tyrus im Detail besprechen – eine leistungsstarke und flexible Bibliothek für die Arbeit mit WebSocket in Java, die es ermöglicht, bidirektionalen Datenaustausch einfach in Ihre Projekte zu integrieren.
Was ist Tyrus und warum wird es benötigt?
Tyrus ist eine quelloffene Implementierung (Referenzimplementierung) der Spezifikation JSR 356, die unter der Schirmherrschaft der Eclipse Foundation entwickelt wurde. Sie bietet einen vollständigen Satz von APIs zum Erstellen sowohl von Server- als auch von Client-WebSocket-Anwendungen in Java. Die Hauptvorteile von Tyrus:
- Vollständige Übereinstimmung mit dem Standard JSR 356 – mit Tyrus geschriebener Code lässt sich leicht auf andere Implementierungen (z. B. Apache Tomcat, Jetty) portieren.
- Unterstützung von Annotationen – minimalistischer Ansatz: Es genügt, die Annotationen
@ServerEndpointoder@ClientEndpointzu einem POJO hinzuzufügen. - Flexibilität – funktioniert sowohl in Servlet-Containern (Tomcat, GlassFish) als auch im Standalone-Modus (eingebetteter Grizzly-Server).
- Sicherheit – Unterstützung von WSS (WebSocket Secure) über standardmäßige Java-SSL-Sockets.
Installation und Einbindung von Tyrus
Um mit Tyrus zu arbeiten, müssen Sie einige Abhängigkeiten zu Ihrer pom.xml (Maven) hinzufügen. Die Basiskonfiguration umfasst den Kern der Bibliothek und die Transportschicht (Grizzly für den Standalone-Modus):
<!-- Hauptabhängigkeit Tyrus --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-server</artifactId> <version>1.19</version></dependency>
<!-- Eingebetteter Grizzly-Server für den Standalone-Modus --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-container-grizzly-server</artifactId> <version>1.19</version></dependency>
<!-- Client-Teil (falls eine Verbindung zu anderen Servern erforderlich ist) --><dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-client</artifactId> <version>1.19</version></dependency>Für Gradle (build.gradle):
implementation 'org.glassfish.tyrus:tyrus-server:1.19'implementation 'org.glassfish.tyrus:tyrus-container-grizzly-server:1.19'implementation 'org.glassfish.tyrus:tyrus-client:1.19'Erstellen eines WebSocket-Servers mit Tyrus
Der Serverteil ist eine gewöhnliche Java-Klasse mit der Annotation @ServerEndpoint. Tyrus verwaltet automatisch den Lebenszyklus der Verbindung.
import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.Set;import java.util.concurrent.CopyOnWriteArraySet;
@ServerEndpoint("/chat")public class ChatEndpoint {
// Speichert alle aktiven Sitzungen private static final Set<Session> sessions = new CopyOnWriteArraySet<>();
@OnOpen public void onOpen(Session session) { sessions.add(session); System.out.println("Neue Verbindung: " + session.getId()); broadcast("Benutzer " + session.getId() + " ist dem Chat beigetreten."); }
@OnMessage public void