WebSocket-Bibliothek für Java: Vollständiger Leitfaden zur Entwicklung von Echtzeitanwendungen
WebSocket ist ein Protokoll, das eine bidirektionale Kommunikation zwischen Client und Server über eine einzige langlebige TCP-Verbindung ermöglicht. In Java gibt es mehrere ausgereifte Bibliotheken, die die Arbeit mit WebSocket vereinfachen. In diesem Artikel betrachten wir die wichtigsten Bibliotheken, ihre Funktionen und geben praktische Codebeispiele.
1. Java WebSocket API (JSR 356)
Standard-API für die Arbeit mit WebSocket in Java EE / Jakarta EE. Sie ist Bestandteil von Anwendungsservern (WildFly, TomEE, GlassFish) und ermöglicht die Erstellung sowohl von Server- als auch von Client-Endpunkten.
Hauptfunktionen:
- Annotationen
@ServerEndpointund@ClientEndpoint - Unterstützung für Text- und Binärnachrichten
- Sitzungs- und Lebenszyklusverwaltung
- Integration mit CDI (Contexts and Dependency Injection)
Beispiel für einen Server-Endpunkt:
import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.io.IOException;
@ServerEndpoint("/chat")public class ChatEndpoint {
@OnOpen public void onOpen(Session session) { System.out.println("Neue Verbindung: " + session.getId()); session.getUserProperties().put("username", "Gast"); }
@OnMessage public String onMessage(String message, Session session) { String username = (String) session.getUserProperties().get("username"); return username + ": " + message; }
@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("Verbindung geschlossen: " + reason.getReasonPhrase()); }
@OnError public void onError(Session session, Throwable error) { error.printStackTrace(); }}Beispiel für einen Client:
import javax.websocket.*;import java.net.URI;
@ClientEndpointpublic class ChatClient {
private Session session;
@OnOpen public void onOpen(Session session) { System.out.println("Mit Server verbunden"); this.session = session; }
@OnMessage public void onMessage(String message) { System.out.println("Empfangen: " + message); }
public void sendMessage(String message) throws IOException { if (session != null && session.isOpen()) { session.getBasicRemote().sendText(message); } }
public static void main(String[] args) throws Exception { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ChatClient client = new ChatClient(); container.connectToServer(client, new URI("ws://localhost:8080/chat")); client.sendMessage("Hallo, Welt!"); Thread.sleep(1000); }}2. Tyrus (Referenzimplementierung)
Tyrus ist die Referenzimplementierung von JSR 356 von Oracle. Es kann als eigenständige Bibliothek ohne vollwertigen Anwendungsserver verwendet werden. Ideal für Microservices und leichtgewichtige Anwendungen.
Besonderheiten:
- Funktioniert mit Grizzly, Jetty oder JDK HTTP-Server
- Unterstützung von SockJS für Kompatibilität mit Browsern ohne WebSocket
- Anpassbare Filter und Interceptors
- Flexible Konfiguration über XML oder Java Config
Beispiel für einen eigenständigen Server mit Tyrus + Grizzly:
import org.glassfish.tyrus.server.Server;import javax.websocket.*;import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/echo")public class EchoEndpoint {
@OnMessage public String echo(String message) { return "Echo: " + message; }
public static void main(String[] args) { Server server = new Server("localhost", 8025, "/ws", EchoEndpoint.class); try { Auch in der Bibliothek
Aufgabenwarteschlangen für PHP: RabbitMQ, Gearman und Redis
Elasticsearch C++-Client: Vollständiger Leitfaden für die Arbeit mit der Suchmaschine
Arbeit mit CSV in TypeScript: Bibliotheken, Parsing und Datengenerierung