Open Source im professionellen Einsatz
Linux-Magazin 01/2012
515

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

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Screencast: Webanwendungen mit Websockets

    In einem Screencast zum Linux-Magazin-Artikel "Blühende Oberflächen" zeigt der Autor Andreas Möller Server- und Client-Komponente für die Anwendung.

  • WebSocket4J 1.2 implementiert Client und Server

    Websocket4J, eine freie Umsetzung des bidirektionalen Websocket-Protokolls in Java, ist in Version 1.2 erhältlich. Erstmals setzt sie neben dem Server auch den Client-Part um.

  • Websockets

    Wer den Raspberry Pi über eine Android-App zum Tanz auffordern möchte, bringt am besten Websockets mit auf den Ball. Sie erleichtern die gepflegte Konversation mit dem graziösen Minirechner.

  • Leserbriefe

    Haben Sie Anregungen, Statements oder Kommentare? Dann schreiben Sie an redaktion@linux-magazin.de. Die Redaktion behält es sich vor, die Zuschriften und Leserbriefe zu kürzen. Sie veröffentlicht alle Beiträge mit Namen, sofern der Autor nicht ausdrücklich Anonymität wünscht.

  • Perl-Snapshot

    HTML 5 bringt Websockets, über die Webserver mit ihren Clients in einen Dialog treten können. Die im Folgenden vorgestellte kleine Webapplikation zeigt in Echtzeit im Browser, welche Seiten beliebige User von einem Webserver im Moment aufrufen.

comments powered by Disqus

Ausgabe 11/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.