Baseline Widely available *
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die EventSource
-Schnittstelle ist die Schnittstelle von Web-Inhalten zu Server-sent Events.
Eine EventSource
-Instanz öffnet eine dauerhafte Verbindung zu einem HTTP-Server, der Ereignisse im text/event-stream
-Format sendet. Die Verbindung bleibt offen, bis sie durch Aufrufen von EventSource.close()
geschlossen wird.
Sobald die Verbindung geöffnet ist, werden eingehende Nachrichten vom Server als Ereignisse an Ihren Code geliefert. Wenn im eingehenden Nachrichtenfeld ein Ereignisfeld vorhanden ist, entspricht das ausgelöste Ereignis dem Wert des Ereignisfeldes. Wenn kein Ereignisfeld vorhanden ist, wird ein generisches message
-Ereignis ausgelöst.
Im Gegensatz zu WebSockets sind server-sent events unidirektional; das heiÃt, Datenmeldungen werden in eine Richtung, vom Server zum Client (wie zum Beispiel dem Webbrowser eines Benutzers), geliefert. Das macht sie zu einer hervorragenden Wahl, wenn es nicht notwendig ist, Daten in Form von Nachrichten vom Client zum Server zu senden. Zum Beispiel ist EventSource
ein nützlicher Ansatz für die Handhabung von Dingen wie Social-Media-Statusaktualisierungen, Newsfeeds oder zum Liefern von Daten in einen clientseitigen Speicher Mechanismus wie IndexedDB oder Web Storage.
Warnung: Wenn nicht über HTTP/2 genutzt, leidet SSE unter einer Begrenzung der maximalen Anzahl offener Verbindungen, was besonders schmerzhaft sein kann, wenn mehrere Tabs geöffnet werden, da das Limit pro Browser und auf eine sehr niedrige Zahl (6) festgelegt ist. Das Problem wurde in Chrome und Firefox als "Wird nicht behoben" markiert. Dieses Limit gilt pro Browser + Domain, das heiÃt, Sie können 6 SSE-Verbindungen über alle Tabs zu www.example1.com
und weitere 6 SSE-Verbindungen zu www.example2.com
öffnen. (aus Stack Overflow). Bei der Verwendung von HTTP/2 wird die maximale Anzahl gleichzeitiger HTTP-Streams zwischen dem Server und dem Client ausgehandelt (standardmäÃig 100).
EventSource()
Erstellt eine neue EventSource
, um das Empfangen von server-sent events von einer angegebenen URL zu handhaben, optional im Credentials-Modus.
Diese Schnittstelle erbt auch Eigenschaften von ihrem übergeordneten Element, EventTarget
.
EventSource.readyState
Schreibgeschützt
Eine Zahl, die den Status der Verbindung darstellt. Mögliche Werte sind CONNECTING
(0
), OPEN
(1
) oder CLOSED
(2
).
EventSource.url
Schreibgeschützt
Ein String, der die URL der Quelle darstellt.
EventSource.withCredentials
Schreibgeschützt
Ein boolescher Wert, der angibt, ob das EventSource
-Objekt mit Cross-Origin (CORS) Credentials gesetzt (true
) instanziiert wurde oder nicht (false
, der Standardwert).
Diese Schnittstelle erbt auch Methoden von ihrem übergeordneten Element, EventTarget
.
EventSource.close()
SchlieÃt die Verbindung, falls vorhanden, und setzt das readyState
-Attribut auf CLOSED
. Wenn die Verbindung bereits geschlossen ist, macht die Methode nichts.
error
Wird ausgelöst, wenn eine Verbindung zu einer Ereignisquelle nicht geöffnet werden konnte.
message
Wird ausgelöst, wenn Daten von einer Ereignisquelle empfangen werden.
open
Wird ausgelöst, wenn eine Verbindung zu einer Ereignisquelle geöffnet wurde.
Darüber hinaus kann die Ereignisquelle selbst Nachrichten mit einem Ereignisfeld senden, das führt zu maÃgeschneiderten Ereignissen, die auf diesen Wert abgestimmt sind.
BeispieleIn diesem einfachen Beispiel wird eine EventSource
erstellt, um unbenannte Ereignisse vom Server zu empfangen; eine Seite mit dem Namen sse.php
ist für die Generierung der Ereignisse verantwortlich.
const evtSource = new EventSource("sse.php");
const eventList = document.querySelector("ul");
evtSource.onmessage = (e) => {
const newElement = document.createElement("li");
newElement.textContent = `message: ${e.data}`;
eventList.appendChild(newElement);
};
Jedes empfangene Ereignis lässt den onmessage
-Ereignishandler unseres EventSource
-Objekts laufen. Dieser erstellt wiederum ein neues <li>
-Element, schreibt die Nachrichtendaten hinein und fügt das neue Element dem bereits im Dokument vorhandenen Listenelement hinzu.
Hinweis: Sie finden ein vollständiges Beispiel auf GitHub â siehe Einfaches SSE-Demo mit PHP.
Um auf benannte Ereignisse zu hören, benötigen Sie einen Listener für jeden Typ von gesendetem Ereignis.
const sse = new EventSource("/api/v1/sse");
/*
* This will listen only for events
* similar to the following:
*
* event: notice
* data: useful data
* id: some-id
*/
sse.addEventListener("notice", (e) => {
console.log(e.data);
});
/*
* Similarly, this will listen for events
* with the field `event: update`
*/
sse.addEventListener("update", (e) => {
console.log(e.data);
});
/*
* The event "message" is a special case, as it
* will capture events without an event field
* as well as events that have the specific type
* `event: message` It will not trigger on any
* other event type.
*/
sse.addEventListener("message", (e) => {
console.log(e.data);
});
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4