The WebSocket API (WebSockets)

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die WebSocket API ermöglicht es, eine bidirektionale interaktive Kommunikationssitzung zwischen dem Browser des Benutzers und einem Server zu öffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten erhalten, 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 verfügt über eine gute Unterstützung durch Browser und Server. Es unterstützt jedoch keinen Backpressure. Daher wird bei Nachrichten, die schneller eintreffen, als die Anwendung sie verarbeiten kann, entweder der Speicher des Geräts gefüllt, indem diese Nachrichten zwischengespeichert werden, oder die Anwendung wird aufgrund von 100% CPU-Auslastung nicht mehr reagiert oder beides.
  • Das WebSocketStream-Interface ist eine Promise-basierte Alternative zu WebSocket. Es verwendet die Streams API, um den Empfang und das Senden von Nachrichten zu verwalten, was bedeutet, dass Socket-Verbindungen automatisch von der Rückdruckregelung von Streams profitieren können, um die Lese- oder Schreibgeschwindigkeit zu regulieren und 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 ersetzen wird. WebTransport ist eine vielseitige, niedrigstufige API, die Rückdruck und viele andere Funktionen bietet, die weder von WebSocket noch von WebSocketStream unterstützt werden, wie unidirektionale Streams, in falscher Reihenfolge zugestellte Nachrichten und unsichere Datenübertragung mittels Datagrammen. WebTransport ist komplexer in der Anwendung als WebSockets und die plattformübergreifende Unterstützung ist nicht so umfassend, ermöglicht jedoch die Implementierung komplexer Lösungen. Wenn Standard-WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie eine breite Browser-Kompatibilität benötigen, sollten Sie die WebSocket API verwenden, um schnell betriebsbereit zu sein. Wenn Ihre Anwendung jedoch eine nicht standardmäßige, maßgeschneiderte Lösung erfordert, sollten Sie die WebTransport API verwenden.

Hinweis: Während eine WebSocket-Verbindung funktional etwas mit Standard-Unix-Sockets vergleichbar ist, sind sie nicht miteinander verwandt.

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

Verspricht-basierte Schnittstelle zum Verbinden 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.

Verwandte HTTP-Header

Die HTTP-Header werden im WebSocket-Handshake verwendet:

Sec-WebSocket-Key

Ein HTTP-Anforderungs-Header, der eine Nonce vom Client enthält. Dieser wird im WebSocket-Öffnungshandshake verwendet, um zu überprüfen, dass der Client ausdrücklich eine WebSocket-Verbindung öffnen möchte. 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, zu einer WebSocket-Verbindung zu wechseln. 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 vom Server aus den Präferenzen des Clients ausgewählte Erweiterung an.

Leitfäden

Werkzeuge

  • AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen auf Basis von Protokollen wie WebSocket. Sie können es zur Beschreibung WebSocket-basierter APIs verwenden, genau wie Sie REST-APIs mit der OpenAPI-Spezifikation beschreiben würden. Erfahren Sie warum Sie AsyncAPI mit WebSocket in Betracht ziehen 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 langes Polling/WebSocket-basiertes Drittanbieter-Übertragungsprotokoll für Node.js.
  • SocketCluster: Ein Pub/Sub-WebSocket-Framework für Node.js mit Fokus 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 WebSockets im Hintergrund, wenn sie verfügbar sind, und fällt bei Nichtverfügbarkeit elegant auf andere Techniken und Technologien zurück, während Ihr Anwendungscode gleich bleibt.
  • Caddy: Ein Web-Server, der in der Lage ist, beliebige Befehle (stdin/stdout) als Websocket zu proxyen.
  • 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 Netzwerkbibliothek, die Nachrichten zwischen Prozessen, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
  • WebSocket King: Ein Client-Tool zur Unterstützung der Entwicklung, des Testens und der Arbeit mit WebSocket-Servern.
  • PHP WebSocket Server: Server, geschrieben in PHP, um Verbindungen über Websockets wss:// oder ws:// und normale Sockets über ssl://, tcp:// zu verwalten.
  • Django Channels: Django-Bibliothek, die Unterstützung für WebSockets (und andere Protokolle, die lang laufende asynchrone Verbindungen erfordern) hinzufügt.
  • (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mit WebSocket im Elixir Phoenix Framework.
  • Phoenix LiveView: Echtzeit-interaktive Web-Erlebnisse durch WebSocket im Elixir Phoenix Framework.
  • Flask-SocketIO: gibt Flask-Anwendungen Zugriff auf latenzarme bidirektionale Kommunikation zwischen den Clients und dem Server.
  • Gorilla WebSocket: Gorilla WebSocket ist eine Go Implementierung des WebSocket-Protokolls.

Spezifikationen

Specification
WebSockets Standard
# the-websocket-interface

Browser-Kompatibilität

api.WebSocket

BCD tables only load in the browser

api.WebSocketStream

BCD tables only load in the browser

Siehe auch