Die Einführung von Websockets kommt mit HTML5. Es ermöglicht eine schnelle
Kommunikation, die vom Server zum Client läuft, der zuvor eine HTTP-Anfrage
gestellt hat.
In den meisten Fällen werden die Websocket-Verbindungen von
JavaScript genutzt, können aber von jeder
anderen Programmiersprache auch genutzt werden.
Anlegen eines Websockets
Die folgenden Sourcen sind JavaScript, finden sich aber auch in anderen
Programmiersprachen wieder.
WebSocket WebSocket(in DOMString url, in optional DOMString protocols);
WebSocket WebSocket(in DOMString url, in optional DOMString[] protocols);
Die url beginnt mit ws:// oder wss://. ws steht für Websocket, wss für secure Websocket.
Der nachfolgende Teil bestimmt die Adresse des Servers.
Im zweiten Parameter werden die Protokolle als Array von Strings oder als ein String mit
einem Array von Protokollen beschrieben.
Der Websocket wird eröffnet und kann mit Events versehen werden.
Eventabhandlung
Das Eintreffen von Nachrichten, Fehlern, Öffnen und Schließen werden dem
Programm per Event-Handling mitgeteilt.
- onopen = function(event) {}
Das Spiel ist eröffnet, das Programm kann ab sofort send() aufrufen.
- onmessage = function(event) {}
Der Server sendet. Die Daten befinden sich in event.data.
- onerror = function(event) {}
Da gab es einen bedauerlichen Fehler.
- onclose = function(event) {}
Die Verbindung ist vom Client oder vom Server geschlossen worden.
Senden und Schließen
Mit dem Aufruf send() können Nachrichten an den Gegenüber gesandt werden.
Eine Verbindung kann durch den Aufruf von close() geschlossen werden.
- send(in DOMString data);
- close(in optional unsigned long code, in optional DOMString reason);
Beispielprogramm
Ein kleines Beispiel für den Aufbau und die Behandlung von Websockets
in JavaScript.
var connection = new WebSocket('ws://meinserver.de/webecho', ['soap', 'xmpp']);
connection.onopen = function () {
// Die Verbindung steht!
// Nun kann per connection.send()
// eine Nachricht an den Server gesendet werden.
connection.send('Hallo!');
};
connection.onerror = function (error) {
console.log('Fehler: ' + error);
};
connection.onmessage = function (e) {
console.log('Nachricht empfangen: ' + e.data);
};
Websocket-Nachrichten werden mit einem 0x00-Byte eingeleitet und mit einem
0xFF-Byte abgeschlossen.
C++ Implementierung:
Java Implementierung: