WebSocket ist ein Netzwerkprotokoll, welches den Kommunikationsablauf und Datenaustausch zwischen Netzwerken, so beispielsweise auch zwischen Browser und Webserver, definiert. Es läuft über die Ports 80 und 443. Der Name geht auf die Endpunkte der Netzwerke zur Kommunikation zurück, die im Englischen auch Sockets genannt werden. Basierend auf dem TCP-Protokoll (Transmission Control Protocol) ist das WebSocket-Protokoll bidirektional und asynchron, das heißt Daten können gleichzeitig in zwei Richtungen übermittelt werden. Somit ist es möglich, Daten nahezu in Echtzeit zu übertragen. Während die Kommunikation über HTTP aus Frage und Antwort besteht und eine feste Reihenfolge vorgibt, hat dies eine für unser heutiges Verständnis eher hohe Latenzzeit zur Folge.
Exkurs: Polling
Diese starre Frage-Antwort-Struktur ist auch unter Polling bekannt. Es handelt sich um ein Netzwerk-Zugriffsverfahren, wie es beispielsweise bei der Netzwerkkommunikation zwischen Browser und Webserver über HTTP der Fall ist. Hierbei fragt der Client den Server in bestimmten Abständen nach neuen Informationen ab. Der springende Punkt: Die Kommunikation kann nur einseitig vom Browser initiiert werden. Der Webserver ist nicht in der Lage, die Kommunikation selbst anzustoßen – sie erfolgt unidirektional nur auf Anfrage des Browsers hin.
Ablauf der Kommunikation über WebSockets
Zu Beginn sendet der Browser eine HTTP Get-Anfrage um die Kommunikation anzustoßen. Zusätzlich wird ein Wechsel auf das WebSocket-Protokoll angefragt. Antwortet der Server mit dem HTTP-Statuscode 101 – Switching Protocols – wird von da an über das neue WebSocket-Protokoll kommuniziert. Nun bleibt der Kommunikationskanal offen und der Server kann auch ohne vorherige Anfrage des Browsers Daten senden. Die Kommunikation erfolgt bidirektional.
Die Initiierung der Kommunikation über WebSockets sieht folgendermaßen aus:
Der Client stellt den GET-Request und fragt ein Upgrade auf das neue Protokoll an:
Führt der Server den Wechsel aus, sieht seine Antwort in der Regel so aus:
Diese Initiierung der Kommunikation über WebSockets wird auch als Handshake bezeichnet.
Anwendungsfälle
Durch die Möglichkeit der gleichzeitigen Kommunikation zwischen Client und Server kann die Übertragungsgeschwindigkeit signifikant erhöht und die Latenzzeit auf ein Minimum reduziert werden. Dies ist vor allem relevant für Nachrichtenticker, Messengerdienste, Onlinespiele und Online-Auktionen.
2011 wurde durch das World Wide Web Consortium (W3C) ein WebSockets-Standard eingeführt. W3C ist ein 1994 von Tim Berners-Lee gegründetes Gremium zur Standardisierung von Techniken im Internet. Auch die RFC (Request for Comments) bietet unter den Nummern 6455, 7936, 8307, 8441 einen guten Überblick über die Spezifikationen.
Unterschiede HTTP und WS
HTTP und WS sind beides Kommunikations-Protokolle für die Client-Server-Kommunikation. Sie legen unter anderem den Syntax, das Error-Handling und die Kommunikationsmethoden fest. Dennoch gibt es große Unterschiede:
HTTP | WS |
---|---|
Unidirektional | Bidirektional |
Vergleichsweise hohe Latenzzeit | Hohe Übertragungsgeschwindigkeit |
Der Kommunikationskanal wird nach einem Frage-Antwort-Satz immer geschlossen | Der Kommunikationskanal bleibt offen bis der Client oder der Server diesen schließt |
Kommunikation wird immer vom Browser angestoßen | Der Server kann auch ohne Anfrage des Browsers Daten senden |
Eignet sich für die Übertragung starrer Daten | Eignet sich für die Übertragung von Live-Daten |
Quellen
https://www.rfc-editor.org/rfc/rfc6455
https://websockets.spec.whatwg.org//
https://de.ryte.com/wiki/Websocket
https://www.bigdata-insider.de/was-ist-websocket-a-1042523/
https://www.ionos.de/digitalguide/websites/web-entwicklung/was-ist-websocket/