Websocket (Programmierung): Unterschied zwischen den Versionen

Aus TippvomTibb
Zur Navigation springen Zur Suche springen
Zeile 64: Zeile 64:
 
|onclose||close||Verbindung geschlossen, oder Verbindungsaufbau gescheitert
 
|onclose||close||Verbindung geschlossen, oder Verbindungsaufbau gescheitert
 
|}
 
|}
 +
 +
Die Eventhandler sind Attribute des WebSocket-Objektes.
 +
 +
==Codeschnipsel==
 +
===onopen===
 +
<syntaxhighlight lang="javascript">
 +
meinWebSocket.onopen = function() {
 +
console.log('WebSocket-Verbindung aufgebaut!');
 +
meinWebSocket.send('...');
 +
}
 +
</syntaxhighlight>
 +
===onerror===
 +
<syntaxhighlight lang="javascript">
 +
meinWebSocket.onerror = function(event) {
 +
let reason = event.reason;
 +
let code = event.code;
 +
console.log('WebSocket-Verbindung Error: ' +  reason + '(' + code + ')');
 +
}
 +
</syntaxhighlight>
 +
===onmessage===
 +
<syntaxhighlight lang="javascript">
 +
meinWebSocket.onmessage = function(message) {
 +
let data = message.data;
 +
console.log('WebSocket-Nachricht: ' +  data);
 +
}
 +
</syntaxhighlight>
 +
===onclose===
 +
<syntaxhighlight lang="javascript">
 +
meinWebSocket.onclose = function(event) {
 +
let state = event.readyState;
 +
console.log('WebSocket-ReadyState: ' +  state);
 +
}
 +
</syntaxhighlight>
 +
 +
Es ist auch moeglich die Eventhandler-Funktionen imt der Methode addEventListener() bekannt zu machen.
 +
 +
meinWWebSocket.addEventListener("",funtion()){...};
 +
 +
Hiermit sind dann auch mehrere Handler-Funktionen pro Event moeglich.
  
 
=Request for Comments=
 
=Request for Comments=

Version vom 4. Februar 2024, 21:04 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 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

Die Eventhandler sind Attribute des WebSocket-Objektes.

Codeschnipsel

onopen

meinWebSocket.onopen = function() {
 console.log('WebSocket-Verbindung aufgebaut!');
 meinWebSocket.send('...');
}

onerror

meinWebSocket.onerror = function(event) {
 let reason = event.reason;
 let code = event.code;
 console.log('WebSocket-Verbindung Error: ' +  reason + '(' + code + ')');
}

onmessage

meinWebSocket.onmessage = function(message) {
 let data = message.data;
 console.log('WebSocket-Nachricht: ' +  data);
}

onclose

meinWebSocket.onclose = function(event) {
 let state = event.readyState;
 console.log('WebSocket-ReadyState: ' +  state);
}

Es ist auch moeglich die Eventhandler-Funktionen imt der Methode addEventListener() bekannt zu machen.

meinWWebSocket.addEventListener("",funtion()){...};

Hiermit sind dann auch mehrere Handler-Funktionen pro Event moeglich.

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]