LivePolling mit Websockets
Von Thomas Eitler am 03.07.2011
Idee
Die Idee dieser Applikation ist es, dem Benutzer eine einfache Möglichkeit zur Verfügung zu stellen, schnell kleine Umfragen zu erheben. Es gibt eine Adminoberfläche, von der aus Fragen an alle Clients gesendet werden können. Sobald die ersten Abstimmungen eintreffen, wird dort auch eine simple statistische Auswertung angezeigt.
Das Projekt ist als Web-Applikation mit Javascript und PHP umgesetzt und verwendet Websockets zur Kommunikation. Ein Schwerpunkt bei der Entwicklung lag außerdem auf der mobilen Optimierung. Hierbei muss angemerkt werden, dass die Anwendung derzeit leider nur auf iPhone/iPad mit mindestens iOS4.2 funktioniert. Auf anderen mobilen Geräten sind Websockets noch nicht implementiert.
Was sind eigentlich Websockets?
Websockets sind eine Technologie, die es ermöglicht einen Kommunikationskanal über einen Socket zu öffnen und diesen auch zu halten, bis dieser wieder geschlossen wird. Um das zu erreichen, werden bei der ersten Anfrage zusätzliche Informationen im Header mitgeschickt, die das HTTP Protokoll erweitern. Der Websocket Server wartet dann auf Anfragen der Clients oder kann Nachrichten direkt an Clients schicken.
Eine Alternative bietet der Einsatz von AJAX-Longpolling. Hierbei benötigt man ein serverseitiges Skript, welches durch einen AJAX-Aufrufe aktiviert wird und dann künstlich gehalten wird, bis die gewünschte Information vollständig am vom Server vorhanden ist. Entscheidende Problematik hierbei ist, dass durch Latenzen und Serverlimitationen das Skript einfach durch einen Timeout abgebrochen werden kann. Zusätzlich benötigt so ein Skript sehr viel Ressourcen am Server und kann im schlimmsten Fall die Kommunikation zum Client blockieren. Diese Nachteile sollen bei der Verwendung von Websockets nicht mehr auftreten.
Zu beachten gilt, dass das Protokoll selbst noch in der Entwicklung ist und sich noch einige Male ändern wird bevor es final veröffentlicht wird. Ein schwerwiegenderes Problem ist außerdem, dass es noch eine Sicherheitslücke im Protokoll selbst gibt und deshalb Websockets im Opera 10 und Firefox 4 deaktiviert.
Browser Unterstützung
- Auf WebKit basierende Browser (Google Chrome, Safari)
- Opera, ab Version 10.70
- Firefox, ab Version 4.0 beta 7
Umsetzung
Wie schon erwähnt handelt es sich hier um eine Web Applikation. Die clientseitige Programmierung wurde in JavaScript mit Hilfe von jQuery und einem entsprechenden Plugin für Websockets durchgeführt. Serverseitig wird eine modifizierte Version einer PHP Websocket Klasse verwendet um den Anforderungen des Projekts zu genügen. Um die Anwendung zu verwenden, muss zuerst das PHP Skript über die Konsole gestartet werden. Daraufhin horcht der somit gestartete Websocket Server auf eingehende Client Verbindungen. Sind Clients verbunden können Events zum Senden oder Empfangen von Nachrichten ausgelöst werden. Die folgende Galerie zeigt einige Screenshots des Interfaces für die Anwendung.
The comments are closed.