WebSocket-Bibliotheken für Java: Vollständiger Leitfaden zur Echtzeit-Implementierung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 @ServerEndpoint und @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 {

Empfehlungen