Websocket (Programmierung): Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „=Allgemeines= Wie programmiert man eine Websocket-Kommunikation in Javascript, Python, PHP, ...? =Javascript= Als erstes benoetigt man eine Instanz eines Webs…“) |
|||
Zeile 4: | Zeile 4: | ||
=Javascript= | =Javascript= | ||
Als erstes benoetigt man eine Instanz eines Websocket-Objektes (Javascript-API des W3C (/ˈdʌbəl.juː ˈkjuːbd/ C)). | Als erstes benoetigt man eine Instanz eines Websocket-Objektes (Javascript-API des W3C (/ˈdʌbəl.juː ˈkjuːbd/ C)). | ||
+ | |||
+ | var meinWebSocket = new WebSocket('<URL>',['<Subprotokoll>',...]) | ||
+ | |||
+ | Die Angabe des Subprotokolls ist optional. | ||
+ | |||
+ | Das fuehrt zu einem WebSocket Opening-Handshake-Request ueber HTTP. | ||
+ | |||
+ | <code> | ||
+ | GET /chat HTTP/1.1 | ||
+ | Host: server.example.com | ||
+ | Upgrade: websocket | ||
+ | Connection: Upgrade | ||
+ | Sec-WebSocket-Key: dGhlICLhbXBsZSBub14jXY== | ||
+ | Origin: http://example.com | ||
+ | Sec-WebSocket-Protocol: chat, superchat, soap, wamp, .... | ||
+ | Sec-WebSocket-Version: 13 | ||
+ | Sec-WebSocket-Extensions: ....... | ||
+ | </code> | ||
+ | |||
+ | WebSocket Opening-Handshake-Response | ||
+ | |||
+ | <code> | ||
+ | HTTP/1.1 101 Switching Protocols | ||
+ | Upgrade: websocket | ||
+ | Connection: Upgrade | ||
+ | Sec-WebSocket-Accept: s3pPCLBiTxaQ9kYGzzhZRbK+OMG= (key nicht valide) | ||
+ | Sec-WebSocket-Protocol: chat | ||
+ | </code> | ||
+ | |||
+ | Sec-WebSocket-Accept benutzt den Sec-WebSocket-Key und haengt eine [https://de.wikipedia.org/wiki/Universally_Unique_Identifier GUID] an. Diese Zeichenkette wird dann mittels der Hashfunktion SHA-1 verschlüsselt und dann noch Base64 kodiert, um sie als Textstring uebertragen zu koennen. | ||
+ | |||
+ | TODO Algorithmus | ||
+ | |||
+ | Nachdem Instanzieren und der Verbindungsaufnahme kann sich die Verbindung in 4 moeglichen Zustaenden (readyState) befinden. | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Zustand!!readyState!!Beschrebung | ||
+ | |- | ||
+ | |CONECTING||0||Objekt instanziert; Vebindung zum Server wird aufgebaut | ||
+ | |- | ||
+ | |OPEN||1||Verbindung erfolgreich aufgebaut; Kanal kommunikationsbereit | ||
+ | |- | ||
+ | |CLOSING||2||Verbindung wird geschlossen (Closing-Handshake) | ||
+ | |- | ||
+ | |CLOSED||1||Verbindung geschlossen, oder Verbindungsaufbau gescheitert | ||
+ | |} | ||
+ | |||
+ | =Request for Comments= | ||
+ | |||
+ | <comments /> | ||
+ | |||
+ | =Links= | ||
+ | [https://web-development.github.io/applied-js-and-css/websocket/] |
Version vom 4. Februar 2024, 20:40 Uhr
Inhaltsverzeichnis
Allgemeines
Wie programmiert man eine Websocket-Kommunikation in Javascript, Python, PHP, ...?
Javascript
Als erstes benoetigt man eine Instanz eines Websocket-Objektes (Javascript-API des W3C (/ˈdʌbəl.juː ˈkjuːbd/ C)).
var meinWebSocket = new WebSocket('<URL>',['<Subprotokoll>',...])
Die Angabe des Subprotokolls ist optional.
Das fuehrt zu einem WebSocket Opening-Handshake-Request ueber HTTP.
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlICLhbXBsZSBub14jXY==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat, soap, wamp, ....
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: .......
WebSocket Opening-Handshake-Response
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPCLBiTxaQ9kYGzzhZRbK+OMG= (key nicht valide)
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Accept benutzt den Sec-WebSocket-Key und haengt eine GUID an. Diese Zeichenkette wird dann mittels der Hashfunktion SHA-1 verschlüsselt und dann noch Base64 kodiert, um sie als Textstring uebertragen zu koennen.
TODO Algorithmus
Nachdem Instanzieren und der Verbindungsaufnahme kann sich die Verbindung in 4 moeglichen Zustaenden (readyState) befinden.
Zustand | readyState | Beschrebung |
---|---|---|
CONECTING | 0 | Objekt instanziert; Vebindung zum Server wird aufgebaut |
OPEN | 1 | Verbindung erfolgreich aufgebaut; Kanal kommunikationsbereit |
CLOSING | 2 | Verbindung wird geschlossen (Closing-Handshake) |
CLOSED | 1 | Verbindung geschlossen, oder Verbindungsaufbau gescheitert |
Die automatische Aktualisierung der Kommentare aktivieren.