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 es, eine bidirektionale interaktive Kommunikationssitzung zwischen dem Browser des Benutzers und einem Server zu eröffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server auf eine Antwort anfragen zu müssen.

Die WebSocket API bietet zwei alternative Mechanismen für die Erstellung und Nutzung von WebSocket-Verbindungen: das WebSocket-Interface und das WebSocketStream-Interface.

  • Das WebSocket-Interface ist stabil und hat eine gute Unterstützung durch Browser und Server, unterstützt jedoch keinen Backpressure. Infolgedessen, wenn Nachrichten schneller ankommen, als die Anwendung sie verarbeiten kann, wird entweder der Gerätespeicher durch Puffern dieser Nachrichten gefüllt, es wird aufgrund 100%iger CPU-Auslastung nicht mehr ansprechbar oder beides.
  • Das WebSocketStream-Interface ist eine Promise-basierte Alternative zu WebSocket. Es nutzt die Streams API zur Verarbeitung des Empfangs und Sendens von Nachrichten, was bedeutet, dass Socket-Verbindungen automatisch von Stream-Backpressure profitieren können, indem die Lese- oder Schreibgeschwindigkeit geregelt wird, um Engpässe in der Anwendung zu vermeiden. WebSocketStream ist jedoch nicht standardisiert und wird derzeit nur von einer Rendering-Engine unterstützt.

Zusätzlich wird erwartet, dass die WebTransport API die WebSocket API für viele Anwendungen ersetzt. WebTransport ist eine vielseitige, niedrigstufige API, die Backpressure und viele weitere Funktionen bietet, die weder WebSocket noch WebSocketStream unterstützen, wie unidirektionale Streams, außerordentliche Reihenfolge der Nachrichtenübermittlung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplizierter zu verwenden als WebSockets und die Unterstützung durch verschiedene Browser ist nicht so breit, aber es ermöglicht die Umsetzung komplexer Lösungen. Wenn standardisierte WebSocket-Verbindungen gut für Ihren Anwendungsfall geeignet sind und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSockets API verwenden, um schnell starten zu können. Wenn Ihre Anwendung jedoch eine nicht standardmäßige, maßgeschneiderte Lösung erfordert, sollten Sie die WebTransport API verwenden.

Hinweis: Wenn eine Seite über eine offene WebSocket-Verbindung verfügt, wird der Browser sie möglicherweise nicht in den bfcache aufnehmen. Es ist daher eine gute Praxis, die Verbindung zu schließen, wenn der Benutzer mit der Seite fertig ist. Siehe Arbeiten mit dem bfcache.

Schnittstellen

WebSocket

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

WebSocketStream Nicht standardisiert

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

CloseEvent

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

MessageEvent

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

Verwandte HTTP-Header

Die HTTP-Header werden im WebSocket-Handshake verwendet:

Sec-WebSocket-Key

Ein HTTP-Anforderungs-Header, der einen Nonce des Clients enthält. Dieser wird im WebSocket-Öffnungshandshake 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-Öffnungshandshake verwendet wird, um anzuzeigen, 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 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 listet die vom Server unterstützten Versionen auf.

Sec-WebSocket-Protocol

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

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 von dem Server aus den Präferenzen des Clients ausgewählte Erweiterung an.

Leitfäden

Tools

  • AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen, die auf Protokollen wie WebSocket basieren. Sie können damit WebSocket-basierte APIs 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 drittes Übertragungsprotokoll basierend auf Long Polling/WebSocket 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-Anwendungs-Framework für Node.js (Beispiel: WebSocket-Chat)
  • SignalR: SignalR wird WebSockets unter der Haube verwenden, wenn diese verfügbar sind, und nahtlos auf andere Techniken und Technologien zurückgreifen, wenn dies nicht der Fall ist, während Ihr Anwendungs-Code gleich bleibt.
  • Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) als WebSocket proxyfähig machen kann.
  • ws: Eine beliebte WebSocket-Client-&-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: Eine einbettbare Netzwerklibrary, die Nachrichten über In-Prozesse, IPC, TCP, UDP, TIPC, Multicast und WebSocket transportiert.
  • WebSocket King: Ein Client-Tool, um WebSocket-Server zu entwickeln, zu testen, und mit ihnen zu arbeiten.
  • PHP WebSocket Server: Server, geschrieben in PHP, zur Behandlung von Verbindungen über WebSockets wss:// oder ws:// und normale Sockets über ssl://, tcp://.
  • Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die langlaufende asynchrone Verbindungen erfordern) hinzufügt.
  • (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mittels WebSocket im Elixir-Phoenix-Framework.
  • Phoenix LiveView: Echtzeit-interaktive Web-Erlebnisse über WebSocket im Elixir-Phoenix-Framework.
  • Flask-SocketIO: Gibt Flask-Anwendungen Zugang zu latenzarmen bidirektionalen Kommunikation zwischen den Clients und dem 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