Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
de:netzer:websockets [2013/02/01 16:58] – [onclose] cfritzsch | de:netzer:websockets [2025/06/11 20:42] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ======= 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]]. | ||
- | Bei klassisches HTTP sendet ein Client (z.B. der Browser) eine Anfrage (Request) die dann vom Server (z.B. ein Netzer) beantwortet wird (Response). Der Server kann nicht von sich aus Daten an den Client senden. | + | |
+ | ====== 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. | 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. | ||
- | WebSockets sind 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. | + | 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. |
+ | <note important> | ||
+ | Der Netzer unterstützt Websocket ab Version 1.5 ! | ||
+ | </ | ||
- | ====== | + | ====== |
+ | Da eine aktive WebSocket-Verbindung stets eine aktive TCP-Verbindung zum Webserver des Netzers benötigt, blockiert sie den Zugriff auf Webseiten. | ||
+ | Des Weiteren kann zu jeder Zeit maximal eine WebSocket-Verbindung aufgebaut werden. | ||
- | Im Allgemeinen beginnen unverschlüsselte WebSocket-URI mit '' | ||
- | und verschlüsselte mit '' | ||
- | Die WebSocket-URI eines Netzers folgt dem Schema '' | + | ===== Unterstützte Befehle ===== |
- | Die WebSocket-Funktion eines Netzers mit der IP '' | + | |
+ | Es werden alle Befehle der [[commandinterface|Kommandoschnittstelle]] unterstützt. | ||
+ | Darüberhinaus gibt es keine für WebSocket spezifischen Befehle. | ||
- | ====== | + | |
+ | ====== | ||
+ | |||
+ | Im Allgemeinen beginnen unverschlüsselte WebSocket-URI mit '' | ||
+ | |||
+ | Die WebSocket-URI eines Netzers folgt dem Schema '' | ||
+ | Die WebSocket-Funktion eines Netzers mit der IP '' | ||
+ | ====== WebSocket in JavaScript ====== | ||
===== Verbindung öffnen ===== | ===== Verbindung öffnen ===== | ||
Line 29: | Line 45: | ||
< | < | ||
- | In manchen Firefox-Versionen (bis Version 11) heißt das WebSocket-Objekt " | + | In manchen Firefox-Versionen (bis Version 11) heißt das WebSocket-Objekt " |
< | < | ||
Line 37: | Line 53: | ||
- | WebSockets unterstützen | + | WebSocket unterstützt |
Da der Netzer nur Text-Übertragungen benutzt, wird an dieser Stelle auch nur diese weiter besprochen. | 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 and '' | + | Die Übertragungsart Text wird nur dann verwendet, wenn die an '' |
< | < | ||
Line 57: | Line 73: | ||
===== Verbindung schließen ===== | ===== Verbindung schließen ===== | ||
- | + | Um die WebSocket-Verbindung zu schließen, wird die Funktion '' | |
- | Um die WebSocket-Verbindung zu shcließen wird, die Funktion '' | + | |
< | < | ||
Line 83: | Line 98: | ||
- | "onerror" | + | '' |
===== Ein einfaches Beispiel ===== | ===== Ein einfaches Beispiel ===== | ||
+ | Anzeigen des aktuellen Wertes von IO-0. | ||
+ | <WRAP center round download 60%> | ||
+ | [[@/ | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | <meta http-equiv=" | ||
+ | < | ||
+ | var meinWebSocket, | ||
+ | // verbinden | ||
+ | verbinden = function() { | ||
+ | // bisherige Verbindung bereinigen | ||
+ | if(meinWebSocket) | ||
+ | { | ||
+ | meinWebSocket.close(); | ||
+ | } | ||
+ | |||
+ | // URL extrahieren | ||
+ | url = document.getElementById(" | ||
+ | |||
+ | // neue Verbindung erstellen | ||
+ | if(" | ||
+ | { | ||
+ | meinWebSocket = new WebSocket(url); | ||
+ | } | ||
+ | else if(" | ||
+ | { | ||
+ | meinWebSocket = new MozWebSocket(url); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | alert(" | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | // Handler für eingehende Nachrichten setzen | ||
+ | meinWebSocket.onmessage = nachrichtEmpfangen; | ||
+ | |||
+ | // wenn die Verbindung offen ist, wird ein Kommando gesendet, das den Trigger setzt | ||
+ | meinWebSocket.onopen = function() {meinWebSocket.send(" | ||
+ | }, | ||
+ | // Nachricht empfangen | ||
+ | nachrichtEmpfangen = function(event) { | ||
+ | nachrichtJSON = JSON.parse(event.data); | ||
+ | |||
+ | // Ist es ein Update des Wertes? | ||
+ | if(nachrichtJSON && nachrichtJSON.u && nachrichtJSON.u.v && nachrichtJSON.u.v[" | ||
+ | { | ||
+ | document.getElementById(" | ||
+ | } | ||
+ | // andere Nachrichten werden ignoriert | ||
+ | }, | ||
+ | // Funktion für die initiale Konfiguration der Seite | ||
+ | seiteEinrichten = function() { | ||
+ | // Hinweis löschen | ||
+ | document.getElementById(" | ||
+ | // Event-Handler setzen | ||
+ | document.getElementById(" | ||
+ | }; | ||
+ | </ | ||
+ | </ | ||
+ | <body onload=seiteEinrichten()> | ||
+ | <div id=" | ||
+ | <input value=" | ||
+ | <input id=" | ||
+ | < | ||
+ | <div style=" | ||
+ | </ | ||
+ | </ | ||
+ | </ |