======= WebSocket =======
WebSocket ist ein Protokoll für bidirektionale Kommunikation zwischen einer Webanwendung und einem Server über eine TCP-Verbindung.\\
Der Netzer nutzt WebSocket als ein Kanal für die [[commandinterface|Kommandoschnittstelle]].
====== Warum WebSocket? ======
Bei klassisches HTTP sendet ein Client (z.B. der Browser) eine Anfrage (Request) die dann vom Server (z.B. einem Netzer) beantwortet wird (Response). Der Server kann nicht von sich aus Daten an den Client senden.
Dies ist zum Beispiel dann von Nachteil, wenn Daten in unregelmäßigen Abständen aufgefrischt werden müssen. In solchen Fällen muss der Client auf gut Glück Anfragen stellen, die der Server jedesmal beantworten muss. Dies erzeugt viel unnötigen Datenverkehr.
WebSocket ist eine Möglichkeit für bidirektionale Kommunikation zwischen Server und Client. D.h. sowohl Client, als auch Server können jederzeit Daten an das Gegenüber senden. Beim Auffrischen von Daten reicht es dann aus, wenn der Server neue Daten sendet, sobald diese verfügbar sind. Der Client muss nicht ständig Anfragen stellen.
var meinWebSocket = new WebSocket(meineWebSocketURI);
In manchen Firefox-Versionen (bis Version 11) heißt das WebSocket-Objekt "MozWebSocket". Alle anderen Bezeichnungen sind gleich (sofern sie implementiert wurden). Entsprechende Informationen, welche Browser derzeit Websocket unterstützen findet man hier (englisch): [[wp>WebSocket#Browser_support]].
var meinWebSocket = new MozWebSocket(meineWebSocketURI);
===== Daten senden =====
WebSocket unterstützt grundsätzlich zwei Übertragungsarten: Text (UTF-8) und binär. Daten werden mit Hilfe von ''send(meineDaten)'' gesendet, wobei die Übertragungsart durch den Datentyp von ''meineDaten'' bestimmt wird.
Da der Netzer nur Text-Übertragungen benutzt, wird an dieser Stelle auch nur diese weiter besprochen.
Die Übertragungsart Text wird nur dann verwendet, wenn die an ''send'' übergebene Variable ein String ist.
var meineDaten = "Mein Text steht hier.";
meinWebSocket.send(meineDaten);
===== Daten empfangen =====
Das Empfangen von Daten geschieht über den Event-Handler ''onmessage''. Die empfangen Daten sind in ''event.data'' hinterlegt.
meinWebSocket.onmessage = function(event) {alert("Empfangene Daten: "+event.data);};
===== Verbindung schließen =====
Um die WebSocket-Verbindung zu schließen, wird die Funktion ''close()'' aufgerufen. Optional kann noch ein Close-Code und eine Begründung (Reason) angegeben werden. Allerdings werden beide vom Netzer nicht weiter ausgewertet.
meinWebSocket.close();
===== Weitere Event-Handler =====
==== onopen ====
''onopen'' wird ausgelöst, wenn eine WebSocket-Verbindung geöffnet wird.
==== onclose ====
''onclose'' wird ausgelöst, wenn eine WebSocket-Verbindung geschlossen wird. Den Close-Code und die Begründung, die der Server angegeben hat, können mit ''close'' bzw. ''reason'' abgefragt werden.
meinWebSocket.onclose = function(event) {alert("Verbindung geschlossen. Code: "+event.code+" Begründung: "+event.reason);};
==== onerror ====
''onerror'' wird ausgelöst, wenn ein Fehler auftritt.
===== Ein einfaches Beispiel =====
Anzeigen des aktuellen Wertes von IO-0.