Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

The WebSocket API (WebSockets)

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die WebSocket-API ermöglicht es, eine bidirektionale interaktive Kommunikationssitzung zwischen dem Browser des Nutzers und einem Server zu eröffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server nach einer Antwort abfragen zu müssen.

Die WebSocket-API bietet zwei alternative Mechanismen zum Erstellen und Verwenden von WebSocket-Verbindungen: das WebSocket-Interface und das WebSocketStream-Interface.

  • Das WebSocket-Interface ist stabil und hat eine gute Unterstützung in Browsern und auf Servern. Allerdings unterstützt es keinen Backpressure. Daher kann es passieren, dass der Speicher des Geräts mit der Pufferung von Nachrichten gefüllt wird oder das System aufgrund 100%iger CPU-Auslastung unempfänglich wird, wenn Nachrichten schneller ankommen, als die Anwendung sie verarbeiten kann.
  • Das WebSocketStream-Interface ist eine Promise-basierte Alternative zu WebSocket. Es verwendet die Streams-API, um das Empfangen und Senden von Nachrichten zu handhaben, was bedeutet, dass Socket-Verbindungen automatisch von der Stream-Backpressure profitieren können und die Geschwindigkeit des Lesens oder Schreibens regulieren, um Engpässe in der Anwendung zu vermeiden. Allerdings ist WebSocketStream nicht standardisiert und derzeit nur in einer Rendering-Engine unterstützt.

Zusätzlich wird erwartet, dass die WebTransport-API für viele Anwendungen die WebSocket-API ersetzen wird. WebTransport ist eine vielseitige, niedrigstufige API, die Backpressure und viele andere Funktionen bietet, die weder von WebSocket noch von WebSocketStream unterstützt werden, wie unidirektionale Streams, unordentliche Lieferung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplexer in der Anwendung als WebSockets und die Unterstützung in verschiedenen Browsern ist nicht so breit gefächert, aber sie ermöglicht die Implementierung ausgeklügelter Lösungen. Wenn standardmäßige WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSockets-API verwenden, um schnell einsatzbereit zu sein. Wenn Ihre Anwendung jedoch eine nicht standardmäßige, maßgeschneiderte Lösung erfordert, sollten Sie die WebTransport-API nutzen.

Hinweis: Wenn eine Seite eine offene WebSocket-Verbindung hat, kann der Browser diese möglicherweise nicht zum bfcache hinzufügen. Es ist daher eine gute Praxis, die Verbindung zu schließen, wenn der Nutzer mit der Seite fertig ist. Siehe Arbeiten mit dem bfcache.

Schnittstellen

WebSocket

Das primäre Interface, um sich mit einem WebSocket-Server zu verbinden und Daten über die Verbindung zu senden und zu empfangen.

WebSocketStream Nicht standardisiert

Promise-basiertes Interface zur Verbindung mit einem WebSocket-Server; verwendet Streams zum Senden und Empfangen von Daten über die Verbindung.

CloseEvent

Das Ereignis, das vom WebSocket-Objekt gesendet wird, wenn die Verbindung geschlossen wird.

MessageEvent

Das Ereignis, das vom WebSocket-Objekt gesendet wird, wenn eine Nachricht vom Server empfangen wird.

Verwandte HTTP-Header

Die HTTP-Header werden im WebSocket-Handschlag verwendet:

Sec-WebSocket-Key

Ein HTTP-Anforderungsheader, der einen Nonce vom Client enthält. Dieser wird im WebSocket-Eröffnungs-Handschlag verwendet, um zu überprüfen, dass der Client ausdrücklich die Absicht hat, einen WebSocket zu öffnen. Er wird vom Browser automatisch hinzugefügt.

Sec-WebSocket-Accept

Ein HTTP-Antwortheader, der im WebSocket-Eröffnungs-Handschlag verwendet wird, um anzuzeigen, dass der Server bereit ist, auf eine WebSocket-Verbindung zu aktualisieren. Der Wert in der Anweisung wird aus dem Wert von Sec-WebSocket-Key in der entsprechenden Anfrage berechnet.

Sec-WebSocket-Version

Ein HTTP-Header, der in Anfragen die vom Client verstandene Version des WebSocket-Protokolls angibt. In Antworten wird er nur gesendet, wenn die angeforderte Protokollversion vom Server nicht unterstützt wird und die Versionen auflistet, die der Server unterstützt.

Sec-WebSocket-Protocol

Ein HTTP-Header, der in Anfragen die vom Client in bevorzugter Reihenfolge unterstützten Sub-Protokolle angibt. In Antworten gibt er das vom Server aus den Präferenzen des Clients ausgewählte Sub-Protokoll an.

Sec-WebSocket-Extensions

Ein HTTP-Header, der in Anfragen die vom Client in bevorzugter Reihenfolge unterstützten WebSocket-Erweiterungen angibt. In Antworten gibt er die vom Server aus den Präferenzen des Clients ausgewählte Erweiterung an.

Leitfäden

Werkzeuge

  • AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen basierend auf Protokollen wie WebSocket. Sie können es verwenden, um WebSocket-basierte APIs zu beschreiben, genauso wie Sie REST-APIs mit der OpenAPI-Spezifikation beschreiben würden. Erfahren Sie, warum Sie AsyncAPI mit WebSocket verwenden sollten und wie Sie dies tun können.
  • µWebSockets: Hoch skalierbare WebSocket-Server- und Client-Implementierung für C++11 und Node.js.
  • Socket.IO: Ein auf Long-Polling/WebSocket basierendes Drittprotokoll für Node.js.
  • SocketCluster: Ein pub/sub WebSocket-Framework für Node.js mit Schwerpunkt auf Skalierbarkeit.
  • WebSocket-Node: Eine WebSocket-Server-API-Implementierung für Node.js.
  • Total.js: Web-Anwendungsframework für Node.js (Beispiel: WebSocket-Chat)
  • SignalR: SignalR verwendet WebSockets im Hintergrund, wenn sie verfügbar sind, und wechselt elegant zu anderen Techniken und Technologien, wenn dies nicht der Fall ist, während Ihr Anwendungscode gleich bleibt.
  • Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) als WebSocket umleiten kann.
  • ws: eine beliebte WebSocket-Client- und Server-Bibliothek für Node.js.
  • cowboy: Cowboy ist ein kleiner, schneller und moderner HTTP-Server für Erlang/OTP mit WebSocket-Unterstützung.
  • ZeroMQ: ZeroMQ ist eine einbettbare Netzbibliothek, die Nachrichten über In-Prozess, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
  • WebSocket King: Ein Client-Tool, um die Entwicklung, das Testen und Arbeiten mit WebSocket-Servern zu unterstützen.
  • PHP WebSocket Server: Server, der in PHP geschrieben wurde, um Verbindungen über WebSockets wss:// oder ws:// und normale Sockets über ssl://, tcp:// zu handhaben.
  • Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die langfristige asynchrone Verbindungen erfordern) hinzufügt.
  • Phoenix Channels: Skalierbare Echtzeitkommunikation über WebSocket im Elixir-Phoenix-Framework.
  • Phoenix LiveView: Echtzeit interaktive Web-Erlebnisse über WebSocket im Elixir-Phoenix-Framework.
  • Flask-SocketIO: gibt Flask-Anwendungen Zugriff auf latenzarme bidirektionale Kommunikation zwischen Clients und dem Server.
  • Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.

Spezifikationen

Specification
WebSockets
# the-websocket-interface

Browser-Kompatibilität

api.WebSocket

api.WebSocketStream

Siehe auch