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 Benutzers 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 zur Erstellung und Nutzung von Websocket-Verbindungen: das WebSocket-Interface und das WebSocketStream-Interface.

  • Das WebSocket-Interface ist stabil und hat gute Unterstützung in Browsern und Servern. Es unterstützt jedoch keinen Backpressure. Folglich wird bei schnellerem Eintreffen von Nachrichten, als die Anwendung verarbeiten kann, entweder der Speicher des Geräts durch Pufferung dieser Nachrichten gefüllt, oder die Anwendung wird aufgrund von 100% CPU-Auslastung nicht mehr reagierbar, oder beides.
  • Das WebSocketStream-Interface ist eine auf Promise-basierende Alternative zu WebSocket. Es nutzt die Streams-API zum Empfangen und Senden von Nachrichten, was bedeutet, dass Socket-Verbindungen automatisch von Stream-Backpressure profitieren können, indem sie die Lese- oder Schreibgeschwindigkeit regulieren, um Engpässe in der Anwendung zu vermeiden. Allerdings ist WebSocketStream nicht standardisiert und derzeit nur in 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 Backpressure und viele andere Funktionen bietet, die weder von WebSocket noch von WebSocketStream unterstützt werden, wie z.B. unidirektionale Streams, außerordentliche Lieferung und unzuverlässige Datenübertragung über Datagramme. WebTransport ist komplexer zu verwenden als WebSockets und die plattformübergreifende Unterstützung ist nicht so weit verbreitet, aber es ermöglicht die Implementierung komplexer Lösungen. Wenn Standard-WebSocket-Verbindungen gut zu Ihrem Anwendungsfall passen und Sie breite Browser-Kompatibilität benötigen, sollten Sie die WebSockets-API verwenden, um schnell startklar zu sein. 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, kann der Browser diese nicht in den bfcache aufnehmen. Daher ist es eine gute Praxis, die Verbindung zu schließen, wenn der Benutzer mit der Seite fertig ist. Siehe Arbeiten mit dem bfcache.

Schnittstellen

WebSocket

Das primäre Interface 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 von dem WebSocket-Objekt gesendete Ereignis, wenn die Verbindung geschlossen wird.

MessageEvent

Das von dem WebSocket-Objekt gesendete Ereignis, 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 verifizieren, dass der Client ausdrücklich die Absicht hat, einen WebSocket zu erö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, zu einer WebSocket-Verbindung zu wechseln. Der Wert in der Anweisung wird aus dem Wert von Sec-WebSocket-Key in der entsprechenden Anforderung berechnet.

Sec-WebSocket-Version

Ein HTTP-Header, der in Anforderungen 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 Versionen auf, die der Server unterstützt.

Sec-WebSocket-Protocol

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

Sec-WebSocket-Extensions

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

Leitfäden

Werkzeuge

  • AsyncAPI: Eine Spezifikation zur Beschreibung ereignisgesteuerter Architekturen, die auf Protokollen wie WebSocket basieren. Sie können es verwenden, um WebSocket-basierte APIs genauso zu beschreiben, 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: Hochskalierbare WebSocket-Server- und Client-Implementierung für C++11 und Node.js.
  • Socket.IO: Ein auf Long Polling/WebSocket basierendes 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: Web-Anwendungs-Framework für Node.js (Beispiel: WebSocket-Chat)
  • SignalR: SignalR wird WebSockets unter der Haube verwenden, wenn sie verfügbar sind, und fallweise auf andere Techniken und Technologien zurückgreifen, wenn dies nicht der Fall ist, während Ihr Anwendungscode gleich bleibt.
  • Caddy: Ein Webserver, der beliebige Befehle (stdin/stdout) als Websocket vermitteln 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 Netzwerknutzbibliothek, die Nachrichten über In-Prozess, IPC, TCP, UDP, TIPC, Multicast und WebSocket überträgt.
  • WebSocket King: Ein Client-Tool, um bei der Entwicklung, dem Testen und der Arbeit mit WebSocket-Servern zu helfen.
  • PHP WebSocket Server: Server, der in PHP geschrieben ist, 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 lang laufende asynchrone Verbindungen erfordern) hinzufügt.
  • (Phoenix) Channels: Skalierbare Echtzeit-Kommunikation mit 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 Kommunikationen 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