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 öffnen. Mit dieser API können Sie Nachrichten an einen Server senden und Antworten empfangen, ohne den Server ständig abfragen zu müssen.

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

  • Die WebSocket-Schnittstelle ist stabil und hat eine gute Unterstützung durch Browser und Server. Sie unterstützt jedoch kein Backpressure. Dadurch kann es vorkommen, dass bei schnellerem Nachrichtenempfang, als die Anwendung verarbeiten kann, der Speicher des Geräts stark gefüllt wird, die Anwendung aufgrund von 100% CPU-Auslastung nicht mehr reagiert oder beides geschieht.
  • Die WebSocketStream-Schnittstelle ist eine Promise-basierte Alternative zu WebSocket. Sie verwendet die Streams API, um den Versand und Empfang von Nachrichten zu verwalten, wodurch WebSocket-Verbindungen automatisch von der Stream-Backpressure profitieren können. Dies reguliert die Lese- oder Schreibgeschwindigkeit, um Engpässe in der Anwendung zu vermeiden. Allerdings ist WebSocketStream nicht standardisiert und wird derzeit lediglich von einer Rendering-Engine unterstützt.

Zusätzlich ist zu erwarten, dass die WebTransport-API die WebSocket-API für viele Anwendungen 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, nicht in der richtigen Reihenfolge gelieferte Übertragungen und unzuverlässige Datenübertragung via Datagramme. WebTransport ist komplexer zu verwenden als WebSockets und hat keine so breite plattformübergreifende Unterstützung, ermöglicht jedoch die Implementierung anspruchsvoller Lösungen. Wenn standardisierte WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie breite Browser-Kompatibilität benötigen, sollten Sie die WebSocket-API nutzen, um schnell eine Lösung zu implementieren. Wenn Ihre Anwendung jedoch eine nicht standardisierte, individuelle Lösung erfordert, sollten Sie die WebTransport-API verwenden.

Hinweis: Eine WebSocket-Verbindung ist funktional ähnlich zu standardmäßigen Unix-Sockets, sie sind jedoch nicht miteinander verwandt.

Schnittstellen

WebSocket

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

WebSocketStream Nicht standardisiert

Promise-basierte Schnittstelle zur Verbindung mit einem WebSocket-Server; nutzt 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-Handshake verwendet:

Sec-WebSocket-Key

Ein HTTP-Anforderungs-Header, der einen Nonce des Clients enthält. Dieser wird im WebSocket-Eröffnungshandshake verwendet, um zu überprüfen, dass der Client die Eröffnung einer WebSocket ausdrücklich beabsichtigt. Der Header wird automatisch vom Browser hinzugefügt.

Sec-WebSocket-Accept

Ein HTTP-Antwort-Header, der im WebSocket-Eröffnungshandshake verwendet wird, um anzuzeigen, dass der Server bereit ist, auf eine WebSocket-Verbindung hochzustufen. 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 unterstützte 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 verwenden, um WebSocket-basierte APIs zu beschreiben, ähnlich wie REST-APIs mit der OpenAPI-Spezifikation beschrieben werden. Erfahren Sie warum Sie AsyncAPI mit WebSocket verwenden sollten und wie Sie es tun.
  • µWebSockets: Hoch skalierbare Implementierung von WebSocket-Server und -Client für C++11 und Node.js.
  • Socket.IO: Ein Long-Polling/WebSocket-basiertes, Drittanbieter-Übertragungsprotokoll 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 WebSockets, wenn diese verfügbar sind, und greift nahtlos auf andere Techniken und Technologien zurück, wenn dies nicht der Fall ist, während Ihr Anwendungscode unverändert bleibt.
  • Caddy: Ein Webserver, der beliebige Kommandos (stdin/stdout) als WebSocket weiterleiten 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: ZeroMQ ist eine einbettbare Netzwerklibrary, die Nachrichten über In-Prozess, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
  • WebSocket King: Ein Client-Tool zur Entwicklung, zum Testen und zur Arbeit mit WebSocket-Servern.
  • PHP WebSocket Server: Server geschrieben in PHP für die Verbindung über WebSockets wss:// oder ws:// sowie normale Sockets über ssl://, tcp://.
  • Django Channels: Django-Bibliothek mit Unterstützung für WebSockets (und andere Protokolle, die lang laufende asynchrone Verbindungen erfordern).
  • (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mit WebSocket im Phoenix-Framework von Elixir.
  • Phoenix LiveView: Interaktive Echtzeit-Weberlebnisse via WebSocket im Phoenix-Framework von Elixir.
  • Flask-SocketIO: Erlaubt Flask-Anwendungen, niedrig-latenzige bidirektionale Kommunikation zwischen dem Client und dem Server zu nutzen.
  • Gorilla WebSocket: Gorilla WebSocket ist eine Go-Implementierung des WebSocket-Protokolls.

Spezifikationen

Specification
WebSockets
# 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