Websocket (Programmierung)

Aus TippvomTibb
Zur Navigation springen Zur Suche springen

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 3 Verbindung geschlossen, oder Verbindungsaufbau gescheitert

Beim Wechsel des readyStates wird ein Event ausgeloest.

Eventhandler Event Beschrebung
onopen open State geht in OPEN
onerror error Fehler beim Verbindungsaufbau oder bei der Kommunkiation
onmessage message Nachricht trifft ein
onclose close 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]