Middle+
Warum wurden server-sent Ereignisse in HTML5 eingeführt?
sobes.tech KI
Antwort von AI
Um einen unidirektionalen Kommunikationskanal zwischen Server und Client zu implementieren. Der Server kann Daten an den Client zu jeder Zeit nach Verbindungsherstellung senden.
Wichtige Merkmale und Vorteile:
- Effizienz: Es wird eine normale HTTP-Verbindung verwendet, die die Overheads im Vergleich zum Polling minimiert.
- Einfachheit: Die API für serverseitige Ereignisse (SSE) ist einfacher zu verwenden als WebSockets für unidirektionale Kommunikation.
- Automatisches Wiederverbinden: Der Browser versucht automatisch, die Verbindung bei Unterbrechung wiederherzustellen.
- Unterstützung von Datentypen: Es werden Textdaten im Format
text/event-streamunterstützt. - Browser-Unterstützung: Wird von modernen Browsern breit unterstützt.
Anwendungen:
- Echtzeit-Updates von Nachrichten-Feeds.
- Benachrichtigungen über Ereignisse (z.B. neue Nachrichten).
- Überwachung von Daten in Echtzeit (z.B. Börsenkurse).
- Fortschrittsanzeige bei langen Aufgaben.
Dies ist eine Alternative zum traditionellen Polling, bei dem der Client regelmäßig beim Server nach Updates fragt. Im Gegensatz zu WebSockets ist SSE unidirektional, was die Anwendung vereinfacht, wenn Daten nur vom Server zum Client übertragen werden.
Beispiel auf der Client-Seite (JavaScript):
const eventSource = new EventSource('/events'); // URL zum Empfang von Server-Ereignissen
eventSource.onmessage = function(event) {
// Verarbeitung der empfangenen Daten
console.log('Nachricht empfangen:', event.data);
};
eventSource.onerror = function(error) {
// Fehlerbehandlung bei Verbindung
console.error('Server-Sent Events Fehler:', error);
};
eventSource.addEventListener('customEvent', function(event) {
// Verarbeitung eines benutzerdefinierten Ereignisses vom Typ 'customEvent'
console.log('Benutzerdefiniertes Ereignis empfangen:', event.data);
});
Beispiel für das Datenformat auf der Serverseite:
event: customEvent
data: {"message": "Hallo!"}
data: Einfache Textnachricht
id: 123 // Ereignis-ID, wird für automatische Wiederverbindung verwendet
retry: 5000 // Verzögerung vor der nächsten Wiederverbindung in Millisekunden