Server-Sent Events in Java: Wie man Daten in Echtzeit ohne WebSocket sendet

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

Server-Sent Events in Java: Wenn WebSocket zu viel ist und HTTP nicht ausreicht

\n\n

Haben Sie sich jemals gefragt, wie die Newsfeeds in Twitter, Benachrichtigungen in Telegram oder Live-Ergebnisse von Sportereignissen funktionieren? Scheinbar kommen die Daten von selbst, ohne dass die Seite aktualisiert werden muss. Das Geheimnis ist einfach: Server-Sent Events (SSE) – eine Technologie, die es dem Server ermöglicht, Daten in Echtzeit über eine normale HTTP-Verbindung an den Client zu senden.

\n\n

In diesem Artikel werden wir Server-Sent Events in Java behandeln. Sie erfahren, warum SSE oft praktischer als WebSocket ist, wie Sie einen Server mit der Java Servlet API einrichten und wie Sie Ereignisse auf dem Client empfangen. Der Code ist funktionsfähig, der Stil lebendig und die Beispiele sind so praxisnah wie möglich.

\n\n

Was sind Server-Sent Events und wozu braucht man sie?

\n\n

Server-Sent Events (SSE) sind ein W3C-Standard, der es dem Server ermöglicht, Daten über eine einzige langlebige HTTP-Verbindung an den Client zu „pushen". Der Client abonniert einen Ereignisstrom, und der Server sendet Nachrichten, sobald sie auftreten.

\n\n

SSE eignet sich ideal für:

\n
    \n
  • Benachrichtigungen – neue E-Mails, Nachrichten, Statusänderungen.
  • \n
  • Newsfeeds – Beiträge, Tweets, Wechselkurse.
  • \n
  • Monitoring – Logs, Servermetriken, Aufgabenfortschritt.
  • \n
  • Live-Daten – Aktienkurse, Sportergebnisse, Wetter.
  • \n
\n\n

Im Gegensatz zu WebSocket funktioniert SSE nur in eine Richtung (Server → Client), aber das reicht für die meisten Szenarien aus. Außerdem verwendet SSE normales HTTP, benötigt keine zusätzlichen Ports und passiert problemlos Proxys und Firewalls.

\n\n

Server-Sent Events vs. WebSocket: Was wählen?

\n\n

Wenn Sie nur Daten vom Server an den Client senden müssen (ohne Rückkanal), wählen Sie SSE. Es ist einfacher, leichter und günstiger. WebSocket ist gerechtfertigt, wenn der Client ebenfalls aktiv Daten sendet (z. B. in Chats oder Online-Spielen).

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
KriteriumServer-Sent EventsWebSocket
RichtungServer → ClientBidirektional
ProtokollHTTP/1.1, HTTP/2ws:// oder wss://
Automatische WiederverbindungJa (im Browser integriert)Nein (muss implementiert werden)
ImplementierungsaufwandNiedrigMittel/Hoch
BrowserunterstützungAlle modernenAlle modernen
\n\n

Für die Bildungswebsite PythonLib haben wir Java gewählt, weil es eine zuverlässige Sprache für die Serverentwicklung ist. Los geht's!

\n\n

Serverseite: Implementierung von SSE in Java mit der Servlet API

\n\n

Beginnen wir mit dem Server. Der einfachste Weg ist die Verwendung von Standard-Java-Servlets. Wir benötigen:

\n
    \n
  • Setzen des Headers Content-Type: text/event-stream.
  • \n
  • Deaktivieren des Cachings (Cache-Control: no-cache).
  • \n
  • Die Verbindung offen halten.
  • \n
  • Daten im Format data: ...\\n\\n senden.
  • \n
\n\n

Beispiel 1: Einfacher SSE-Server mit Java Servlet

\n\n

Erstellen wir ein Servlet, das alle 5 Sekunden die aktuelle Uhrzeit sendet.

\n\n
import javax.servlet.ServletException;\nimport javax.servlet.annotation.WebServlet;\nimport javax.servlet.http.HttpServlet;\nimport javax.servlet.http.HttpServletRequest;\nimport javax.servlet.http.HttpServletResponse;\nimport java.io.IOException;\nimport java.io.PrintWriter;\nimport java.time.LocalTime;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.ScheduledExecutorServ                

Blogs

Buchempfehlungen