WebSocket in Java: Echtzeit-Anwendungen von Grund auf erstellen

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

Einführung in WebSocket mit Java: Von der Theorie zu Echtzeit-Anwendungen

Moderne Webanwendungen erfordern zunehmend einen sofortigen Datenaustausch zwischen Client und Server. Das traditionelle HTTP mit seinem „Anfrage-Antwort“-Modell ist für Aufgaben, die eine ständige Verbindung benötigen, schlecht geeignet: Online-Chats, Börsenkurse, Multiplayer-Spiele oder Dashboards. Hier kommt das Protokoll WebSocket ins Spiel, das eine dauerhafte bidirektionale Verbindung herstellt. In diesem Artikel werden wir uns ansehen, wie man WebSocket mit Java implementiert, einen einfachen Chat-Server und -Client erstellt und Best Practices für die Produktionsumgebung betrachten.



Was ist WebSocket und warum Java?

WebSocket ist ein Protokoll, das über TCP arbeitet und den Austausch von Nachrichten in Echtzeit ohne den Overhead von HTTP-Headern ermöglicht. Nach dem Handshake (Upgrade von HTTP auf WebSocket) können Server und Client jederzeit Daten aneinander senden. Java ist eine ausgezeichnete Wahl für die Implementierung von WebSocket aufgrund von:

  • Integrierter Unterstützung in Jakarta EE (ehemals Java EE) durch JSR 356.
  • Hoher Leistung und Multithreading-Fähigkeit.
  • Einem Ökosystem von Frameworks (Spring, Netty, Tyrus), die die Entwicklung vereinfachen.

Im Gegensatz zu Polling und SSE (Server-Sent Events) bietet WebSocket eine vollwertige bidirektionale Kommunikation ohne Verzögerungen.



Architektur einer WebSocket-Anwendung mit Java

Eine typische Echtzeit-Anwendung mit Java umfasst drei Komponenten:

  1. WebSocket-Server – nimmt Verbindungen an, verwaltet Sitzungen, verarbeitet eingehende Nachrichten.
  2. WebSocket-Client – Browser (JavaScript) oder eine native Java-Anwendung, die die Verbindung initiiert.
  3. Geschäftslogik – Nachrichtenverarbeitung, Broadcast, Speicherung in der Datenbank.

Betrachten wir die Implementierung des Servers mit Jakarta WebSocket-Annotationen und des Clients mit JavaScript.



Serverseite: @ServerEndpoint-Annotationen

Um einen Server zu erstellen, reicht es aus, die Abhängigkeit jakarta.websocket-api (oder javax.websocket-api für ältere Versionen) hinzuzufügen. Beispiel eines einfachen Echo-Servers:

import jakarta.websocket.*;import jakarta.websocket.server.ServerEndpoint;import java.io.IOException;

@ServerEndpoint("/echo")public class EchoEndpoint {

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

@OnMessage public void onMessage(String message, Session session) throws IOException { System.out.println("Empfangen: " + message); // Zurücksenden (Echo) session.getBasicRemote().sendText("Echo: " + 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(); }}

Der Server wird in jedem Servlet-Container (Tomcat, Jetty, GlassFish) bereitgestellt. Für Spring Boot verwenden Sie @ServerEndpoint zusammen mit SpringBootApplication.



Clientseite: JavaScript

Der Browser-Client verbindet sich über die standardmäßige WebSocket-API:

const socket = new WebSocket("ws://localhost:8080/echo");

socket.onopen = function(event) { console.log("Verbindung hergestellt"); socket.send("Hallo, Server!");};

socket.onmessage = function(event) { console.log("Nachricht vom Server: " + event.data);};

socket.onclose = function(event) { console.log("Verbindung geschlossen");};

Beachten Sie: Die URL beginnt mit ws:// (oder wss:// für eine gesicherte Verbindung).



Erstellen eines Echtzeit-Chats mit Java

Jetzt bauen wir einen vollständigen

Blogs

Buchempfehlungen