Websocket (Programmierung): Unterschied zwischen den Versionen

Aus TippvomTibb
Zur Navigation springen Zur Suche springen
(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

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

Request for Comments


Kommentar hinzufügen
TippvomTibb freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, registriere dich bitte oder melde dich an.

Links

[1]