WebSocket in Java: Echtzeit-Anwendungen von A bis Z

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

Einleitung: Warum WebSocket zum Standard für Echtzeit-Kommunikation wurde

Moderne Webanwendungen erfordern sofortige Reaktionen auf Ereignisse. Ob Chat, Börsenterminal oder Mehrspieler-Spiel – Benutzer erwarten, dass Daten ohne Seitenneuladung aktualisiert werden. Traditionelles HTTP (REST API) mit seinem "Anfrage-Antwort"-Modell ist für solche Aufgaben ineffizient: Der Client muss den Server ständig abfragen (Polling), was unnötige Last und Verzögerungen verursacht.

Die Lösung für dieses Problem ist das WebSocket-Protokoll, das eine dauerhafte bidirektionale Verbindung zwischen Client und Server herstellt. In diesem Artikel behandeln wir WebSocket in Java von den Grundlagen bis zur Erstellung einer vollständigen Echtzeit-Anwendung. Sie erfahren, wie Sie den Server einrichten, einen Client schreiben und Fehler behandeln.



Grundlagen von WebSocket: Wie es funktioniert

Unterschied zu HTTP

WebSocket ist ein Protokoll, das über TCP arbeitet. Es beginnt als HTTP-Anfrage (Handshake), wonach die Verbindung auf einen dauerhaften bidirektionalen Kanal "upgegradet" wird. Im Gegensatz zu HTTP, wo jede Anfrage eine neue Verbindung erfordert, hält WebSocket diese offen und ermöglicht es dem Server, Daten selbstständig an den Client zu senden (Push-Modell).

Hauptvorteile:

  • Niedrige Latenz – Daten werden sofort ohne erneute Handshakes übertragen.
  • Weniger Traffic – minimaler Header (nur 2-14 Bytes) im Vergleich zu Hunderten von Bytes bei HTTP.
  • Bidirektionalität – sowohl Client als auch Server können das Senden von Daten initiieren.


Architektur einer Echtzeit-Anwendung in Java

Eine typische Anwendung besteht aus drei Komponenten:

  1. Client (Browser oder mobile App), der die Verbindung initiiert.
  2. Anwendungsserver (Java), der die WebSocket-Sitzungen verwaltet.
  3. Backend (Datenbank, Nachrichtenwarteschlangen), das die Geschäftslogik verarbeitet.

Java bietet leistungsstarke Werkzeuge für die Arbeit mit WebSocket – sowohl auf der Serverseite (Jakarta WebSocket, Spring WebSocket) als auch auf der Clientseite (Standard Java WebSocket API).



Erstellung eines WebSocket-Servers in Java

Umgebungsvorbereitung

Für den Serverteil verwenden wir Jakarta WebSocket (früher Java EE WebSocket). Dies ist eine standardisierte API, die Teil von Jakarta EE ist. Sie benötigen:

  • JDK 11 oder höher.
  • Einen Anwendungsserver (z. B. Apache Tomcat 10 oder GlassFish 7).
  • Maven zur Verwaltung von Abhängigkeiten.

Fügen Sie die folgende Abhängigkeit in pom.xml hinzu:

<dependency>    <groupId>jakarta.websocket</groupId>    <artifactId>jakarta.websocket-api</artifactId>    <version>2.1.0</version>    <scope>provided</scope></dependency>


Schreiben eines WebSocket-Endpunkts

Erstellen wir einen einfachen Echo-Server, der die empfangene Nachricht zurücksendet:

import jakarta.websocket.*;import jakarta.websocket.server.ServerEndpoint;

@ServerEndpoint("/chat")public class ChatEndpoint {

@OnOpen public void onOpen(Session session) { System.out.println("Neue Verbindung: " + session.getId()); }

@OnMessage public String onMessage(String message, Session session) { System.out.println("Erhalten von " + session.getId() + ": " + message); return "Echo: " + message; }

@OnClose public void onClose(Session session, CloseReason reason) { System.out.println("Verbindung geschlossen: " + session.getId() + " aus Grund: " + reason.getReasonPhrase()); }

@OnError public void onError(Session session, Throwable error) { System.err.println("Fehler in Sitzung " + session.getId() + ": " + error.getMessage()); }}

Die Annotation @ServerEndpoint("/chat")

Blogs

Buchempfehlungen