WebSocket: Annäherung an Echtzeit im Web

Seite 3: Mit der Hilfe von JavaScript

Inhaltsverzeichnis

Neben dem Protokoll gibt es eine standardisierte JavaScript-API:

// Create new WebSocket
var mySocket = new WebSocket("ws://echo.websockets.org");
// Attach listeners
mySocket.onmessage = function(event) { alert("Der Server sagt: " + event.data); };
mySocket.onopen = function(event) {...};
mySocket.onclose = function(event) {...};
mySocket.onerror = function(event) {...};

Um die Verbindung zu einem WebSocket-Server aufzubauen, wird ein JavaScript-Objekt erzeugt. Der Konstruktor nimmt die URL des Servers entgegen. Anschließend lassen sich verschiedene Listener definieren.

  • "onopen": Aufruf erfolgt nach dem Herstellen der Verbindung.
  • "onclose": Aufruf erfolgt, sobald die Verbindung vom Client oder vom Server geschlossen wurde.
  • "onerror": Aufruf erfolgt im Fehlerfall.
  • "onmessage": Aufruf erfolgt, sobald Nachrichten vom Server im Client ankommen.
onmessage data event
// Send data...
mySocket.send("Hallo Server!");
// Close WebSocket
mySocket.close();

Nach dem erfolgreichem Aufbau der WebSocket-Verbindung kann der Client über den bidirektionalen Kommunikationskanal Nachrichten mit der JavaScript-Funktion send() an den Server senden. Sobald der Client die Verbindung beenden möchte, kann er die close()-Methode aufrufen. In dem Fall wird ebenfalls der onclose-Listener aufgerufen.

Mehr Infos

Das vorgestellte Programm lässt sich in einem modernen Browser ausprobieren, da der Server echo.websocket.org für Testzwecke im Internet bereitsteht.

Der Overhead von WebSocket im Vergleich zu HTTP ist gering. Pro Nachricht beträgt er genau zwei Byte, statt mehrerer Hundert. Eine WebSocket-Nachricht fängt mit einem 0x00-Byte an und endet mit einem 0xFF-Byte. Zwischen den zwei Bytes befinden sich die Nutzdaten, kodiert in UTF-8:

\0x00Hello, WebSocket\0xff 

Besonders deutlich wird der minimale Overhead bei Anwendungen, die eine große Anzahl aktiver Clients haben.

Wie andere HTML5-Standards ist auch der für WebSocket noch nicht zu 100 Prozent verabschiedet, allerdings sind API und Protokoll nah an einer Fertigstellung, und einem Einsatz von WebSocket in Webanwendungen steht nichts im Wege. Folgende Browser bieten bereits native Unterstützung an:

  • Firefox 4/Firefox 5/Firefox 6*
  • Google Chrome 6 und Chromium
  • Safari 5 und "mobile Safari" (iOS 4)
  • Opera 11
nicht ohne zusätzliche Bibliotheken

Auch bieten mehrere Server Unterstützung für WebSocket, etwa:

  • Apache httpd (via "mod_pywebsocket")
  • Jetty
  • jWebSocket
  • Kaazing WebSocket Gateway
  • Oracle Glassfish 3.1
  • Netty Project
  • Node.js/Socket.io