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

View in English Always switch to English

WebSocket API (WebSockets)

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

Die WebSocket API ermöglicht das Öffnen einer interaktiven bidirektionalen Kommunikationssitzung zwischen dem Browser des Benutzers und einem Server. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server wiederholt nach einer Antwort abfragen zu müssen.

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

  • Die Schnittstelle WebSocket ist stabil und wird von Browsern und Servern gut unterstützt. Sie unterstützt jedoch kein Backpressure. Wenn Nachrichten daher schneller eintreffen, als die Anwendung sie verarbeiten kann, wird entweder der Speicher des Geräts durch das Puffern dieser Nachrichten gefüllt, die Anwendung reagiert aufgrund einer CPU-Auslastung von 100 % nicht mehr oder beides.
  • Die Schnittstelle WebSocketStream ist eine Promise-basierte Alternative zu WebSocket. Sie verwendet die Streams API zum Empfangen und Senden von Nachrichten. Dadurch können Socket-Verbindungen automatisch von Stream-Backpressure profitieren und die Lese- oder Schreibgeschwindigkeit regulieren, um Engpässe in der Anwendung zu vermeiden. WebSocketStream ist jedoch nicht standardisiert und wird derzeit nur von einer Rendering-Engine unterstützt.

Darüber hinaus wird erwartet, dass die WebTransport API die WebSocket API für viele Anwendungen ersetzt. WebTransport ist eine vielseitige Low-Level-API, die Backpressure und viele weitere Funktionen bietet, die weder von WebSocket noch von WebSocketStream unterstützt werden, etwa unidirektionale Streams, ungeordnete Zustellung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplexer zu verwenden als WebSockets und seine browserübergreifende Unterstützung ist nicht so umfassend, ermöglicht jedoch die Implementierung anspruchsvoller Lösungen. Wenn Standard-WebSocket-Verbindungen für Ihren Anwendungsfall geeignet sind und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSockets API einsetzen, um schnell starten zu können. Wenn Ihre Anwendung jedoch eine nicht standardisierte, benutzerdefinierte Lösung erfordert, sollten Sie die WebTransport API verwenden.

Hinweis: Wenn eine Seite eine offene WebSocket-Verbindung hat, fügt der Browser sie möglicherweise nicht zum bfcache hinzu. Es empfiehlt sich daher, die Verbindung zu schließen, wenn der Benutzer die Seite nicht mehr verwendet. Siehe Arbeiten mit dem bfcache.

Schnittstellen

WebSocket

Die primäre Schnittstelle zum Herstellen einer Verbindung mit einem WebSocket-Server sowie zum Senden und Empfangen von Daten über die Verbindung.

WebSocketStream

Promise-basierte Schnittstelle zum Herstellen einer Verbindung mit einem WebSocket-Server; verwendet Streams, um Daten über die Verbindung zu senden und zu empfangen.

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.

Zugehörige HTTP-Header

Die HTTP-Header werden im WebSocket-Handshake verwendet:

Sec-WebSocket-Key

Ein HTTP-Anfrage-Header, der eine Nonce vom Client enthält. Dieser wird im WebSocket-Öffnungs-Handshake verwendet, um zu überprüfen, dass der Client ausdrücklich beabsichtigt, einen WebSocket zu öffnen. Er wird automatisch vom Browser hinzugefügt.

Sec-WebSocket-Accept

Ein HTTP-Antwort-Header, der im WebSocket-Öffnungs-Handshake verwendet wird, um anzugeben, dass der Server bereit ist, auf eine WebSocket-Verbindung umzusteigen. Der Wert in der Direktive wird aus dem Wert von Sec-WebSocket-Key in der entsprechenden Anfrage berechnet.

Sec-WebSocket-Version

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

Sec-WebSocket-Protocol

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

Sec-WebSocket-Extensions

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

Leitfäden

Werkzeuge

  • AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen auf Grundlage von Protokollen wie WebSocket. Sie können damit WebSocket-basierte APIs beschreiben, genauso wie Sie REST-APIs mit der OpenAPI-Spezifikation beschreiben würden. Erfahren Sie, warum Sie die Verwendung von AsyncAPI mit WebSocket in Betracht ziehen sollten und wie Sie dies tun können.
  • µWebSockets: Hochskalierbare WebSocket-Server- und Client-Implementierung für C++11 und Node.js.
  • Socket.IO: Ein auf Long Polling/WebSocket basierendes Übertragungsprotokoll eines Drittanbieters 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: Webanwendungs-Framework für Node.js (Beispiel: WebSocket-Chat)
  • SignalR: SignalR verwendet intern WebSockets, wenn diese verfügbar sind, und greift ansonsten nahtlos auf andere Techniken und Technologien zurück, während Ihr Anwendungscode unverändert bleibt.
  • Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) als WebSocket weiterleiten kann.
  • ws: Eine beliebte WebSocket-Client- und Serverbibliothek 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 Netzwerkbibliothek, die Nachrichten über In-Process, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
  • WebSocket King: Ein Client-Werkzeug, das bei der Entwicklung, dem Testen und der Arbeit mit WebSocket-Servern hilft.
  • PHP WebSocket Server: In PHP geschriebener Server zur Verarbeitung von Verbindungen über WebSockets wss:// oder ws:// sowie normale Sockets über ssl://, tcp://
  • Django Channels: Django-Bibliothek, die Unterstützung für WebSockets hinzufügt (und andere Protokolle, die langlebige asynchrone Verbindungen erfordern).
  • (Phoenix) Channels: Skalierbare Echtzeitkommunikation über WebSocket im Elixir-Phoenix-Framework.
  • Phoenix LiveView: Interaktive Web-Erlebnisse in Echtzeit über WebSocket im Elixir-Phoenix-Framework.
  • Flask-SocketIO: Ermöglicht Flask-Anwendungen bidirektionale Kommunikation mit geringer Latenz zwischen Clients und Server.
  • Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.

Spezifikationen

Spezifikation
WebSockets
# the-websocket-interface

Browser-Kompatibilität

api.WebSocket

api.WebSocketStream

Siehe auch