Open Source im professionellen Einsatz

Sockets per Javascript

HTML-5-Dokumente bieten eine Schnittstelle [11], um Websockets mit Javascript zu nutzen. Um ein Websocket-Objekt in Javascript zu initialisieren, muss der Programmierer die Adresse des Websocket-Servers angegeben. Websocket-Server adressiert man mit URLs, anstelle des »http« steht jedoch der Schemabezeichner »ws« am Anfang, etwa in »ws://localhost:9000« in Listing 6.

Listing 6

Nutzung von Websockets per Javascript

01 // Initialisiere Websocket-Objekt
02 var ws = new Websocket('ws://localhost:9000');
03 // Notiere Status des Websockets alle 5s
04 var oiv = setInterval(function() { console.log(ws.readyState) }, 5000);
05 // Sende lokale Zeit zum Server
06 ws.onopen = function() {
07   ws.send(time.toLocaleTimeString());
08 }
09 // Notiere Fehler
10 ws.onerror = function() {
11   console.log('Error!');
12 }
13 // Notiere eingehende Nachricht und schließe Verbindung
14 ws.onmessage = function(e) {
15   console.log(e.data);
16   ws.close(99, 'First message closes connection.');
17  }
18 // Beende Notation des Status
19 ws.onclose = function() {
20   clearInterval(oiv);
21 }

Ist die Websocket-Verbindung aufgebaut, kann der Entwickler Eventhandler nutzen. Der Javascript-Interpreter ruft sie beim Eintreten bestimmter Ereignisse auf: »onopen« nach eröffneter Verbindung, »onerror« bei einem Fehler, »onmessage« , wenn ein Nachricht eingetroffen ist, und »onclose« , wenn die Verbindung erfolgreich geschlossen wurde.

Zum Senden einer Nachricht dient die Methode »send()« , die als Parameter die Nachricht entgegennimmt. Die Methode »close()« beendet die Verbindung. Sie kann zwei optionale Parameter aufnehmen: einen numerischen Code sowie einen Text als Begründung für das Schließen der Verbindung. Das Websocket-Objekt besitzt zudem schreibgeschützte Attribute. So speichert »readyState« den aktuellen Status der Verbindung (»CONNECTION: 0« , »OPEN: 1« , »CLOSING: 2« , »CLOSED: 3« ), »bufferedAmount« die Anzahl noch nicht versandter Bytes und »protocol« die verwendete Version des Protokolls. Das Attribut »extension« informiert über die vom Server vorgegebenen Erweiterungen.

Die Websockets sind in den Browsern Chrome 14+, Firefox 7+ und MSIE 10 am besten implementiert [12]. Für die Initialisierung eines Websocket-Objekts im Mozilla-Browser 7 und 8 ist bisher noch die Vorsilbe »Moz« erforderlich. Die Funktion »websocket()« in Listing 7 gleicht diese Ausnahme aus, indem sie im Fehlerfall die Initialisierung für den Mozilla-Browser ausprobiert.

Listing 7

Funktion websocket()

01 function websocket(url) {
02   try {
03     return new WebSocket(url);
04   } catch (e) {
05     try {
06       return new MozWebSocket(url);
07     } catch(e) {
08       return null;
09     }
10   }
11 }

Autobahn

Das Open-Source-Projekt Autobahn [13] bietet Bibliotheken zum Anlagen von Websocket-Clients für Jquery, Python und Android, daneben ein Python-Framework für Websocket-Server sowie eine Protokoll-Testsuite, die auch einen detaillierten Überblick über den Stand der Implementierung [14] von Websockets in Browsern gibt. Alle Quelltexte sind unter der Apache-2-Lizenz veröffentlicht. Das Server-Framework basiert auf Twisted [15], einer ereignisgesteuerten Netzwerkmaschine. Das Python-Framework Twisted macht es einfach, robuste Netzwerkanwendungen, beispielsweise Server, zu implementieren, und ist unter der MIT-Lizenz verfügbar.

Die Installation von Autobahn zusammen mit Twisted unter Ubuntu Linux 11.04 zeigt Listing 8. Websockets eignen sich gut für Serverdienste, auf die der Anwender per Webbrowser zugreift. Im Folgenden soll mit Hilfe von Autobahn und HTML 5 ein Dienst im Stil der Standard-Netzwerkdienste von Linux entstehen.

Listing 8

Installation von Autobahn

01 sudo apt-get install python-dev
02 sudo apt-get install python-setuptools
03 wget http://pypi.python.org/packages/2.7/a/autobahn/autobahn-0.4.2-py2.7.egg
04 sudo easy_install autobahn-0.4.2-py2.7.egg

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook