Server-Sent Events in JavaScript: Echtzeit ohne WebSocket

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

Was sind Server-Sent Events und warum brauchen Sie sie?

\n\n

Stellen Sie sich vor: Sie haben eine Website mit Wechselkursen geöffnet, und der Dollarkurs ändert sich direkt vor Ihren Augen – ohne Seitenaktualisierung, ohne Tastendruck. Oder Sie warten auf das Ergebnis der Verarbeitung einer großen Datei auf dem Server, und plötzlich erscheint die Zeile: „Zu 70% fertig“. Wie funktioniert das? Eine der elegantesten Methoden sind Server-Sent Events (SSE).

\n\n

SSE ist eine Technologie, die es dem Server ermöglicht, Daten eigenständig an den Client zu senden, sobald sie verfügbar sind. Im Gegensatz zu WebSocket arbeitet SSE nur in eine Richtung – vom Server zum Client. Aber genau darin liegt seine Superkraft: Es ist unglaublich einfach, effizient und ideal für Aufgaben geeignet, bei denen der Client nur Updates empfangen muss.

\n\n

In diesem Artikel werden wir uns ansehen, wie man Server-Sent Events in JavaScript verwendet, funktionierenden Code schreiben und verstehen, wann SSE die beste Wahl ist und wann man besser zu WebSocket greifen sollte. Bereit? Los geht's!

\n\n

Wie funktionieren Server-Sent Events (SSE)?

\n\n

Technisch gesehen ist SSE einfach eine HTTP-Verbindung, die der Server nach dem Senden der Antwort nicht schließt. Stattdessen sendet er Daten in Teilen unter Verwendung des speziellen Formats text/event-stream. Der Client (Browser) hört auf diese Verbindung über das EventSource-Objekt und generiert Ereignisse beim Empfang jeder neuen Nachricht.

\n\n

So sieht eine typische Serverantwort aus:

\n\n
data: {"message": "Hallo!", "timestamp": 1700000000}\n\ndata: {"message": "Neue Benachrichtigung", "timestamp": 1700000001}
\n\n

Jede Nachricht beginnt mit data:, gefolgt von einem Leerzeichen und dem eigentlichen Inhalt. Nachrichten werden durch zwei Zeilenumbrüche \\n\\n getrennt. Der Server kann auch IDs (id:) und Ereignistypen (event:) senden, aber der minimale Satz ist data.

\n\n

Die Client-Seite ist noch einfacher:

\n\n
const eventSource = new EventSource('/events');\n\neventSource.onmessage = (e) => {\n    console.log('Daten empfangen:', e.data);\n};\n\neventSource.onerror = (e) => {\n    console.error('Verbindungsfehler', e);\n};
\n\n

Fertig! Keine komplizierten Handshakes, keine Bibliotheken – der Browser verbindet sich bei einem Verbindungsabbruch automatisch neu und behandelt den Verbindungsverlust selbst. Das ist die wahre Magie von Server-Sent Events.

\n\n

SSE vs WebSocket: Wann wählt man was?

\n\n

Anfänger denken oft: „Da SSE einfacher ist, ist es immer besser.“ Aber das stimmt nicht. Jede Technologie hat ihre Nische. Vergleichen wir sie.

\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
EigenschaftSSEWebSocket
DatenrichtungNur Server → ClientBidirektional
Einfachheit der ImplementierungSehr einfach (nativ im Browser)Mittel (Bibliothek erforderlich)
Automatische WiederverbindungIntegriertMuss manuell implementiert werden
BrowserunterstützungAlle modernen (außer IE)

Blogs

Buchempfehlungen