Das Problem

HTTP-Verbindungen werden grundsätzlich vom Client also z.B. Ihrem Browser aufgebaut. Der Server nimmt die Verbindung entgegen und beantwortet die Anfrage. Es ist also ein unidirektionaler Weg, der es dem Server unmöglich macht, selber eine Anfrage an den Browser zu starten. Ändern sich Daten auf der Serverseite, so aktualisiert sich der Browser nur, wenn selbiger eine Anfrage an den Server schickt. Früher wurden dann vom Server ganze HTML Seiten neu ausgeliefert, diese Methode wurde vielerorts aber durch AJAX Lösungen optimiert. Hier werden nicht mehr ganze HTML Seiten ausgeliefert, sondern nur noch die aktualisierten Teile der aktuellen Seite – im Idealfall sogar nur noch Daten, die dann per Javascript an der richtigen Stelle auf der Seite eingesetzt werden. Für moderne Software, insbesondere SAAS- (Software as a Service) Dienste wird dies aber immer mehr zu einem Problem. Wurden früher Informationen häufig nur von wenigen Personen gepflegt und geändert, so arbeiten heute ganze Teams daran, ständig die Informationen zu aktualisieren.

Die neue Technik

Die Basis der Technik, welche die Entwicklung von Web-Applikationen und Webseiten verändern wird, stammt von 1971 und ist eine der Grundlagen heutiger Kommunikation zweier Systeme miteinander. Es sind die Socket Verbindungen. Diese wurden Ende 2011 als WebSockets definiert und ermöglichen persistente Verbindungen zwischen dem Server und Ihrem Browser. Dabei ist die Technik vollständig kompatibel mit dem HTTP- Protokoll und kann dadurch parallel und in allen Browsern verwendet werden.

Vorteil für Ihr Projekt

Wenn Sie eine Anwendung haben, bei der sich Daten häufig ändern – entweder durch Sie oder durch Ihre Kunden, dann sind WebSockets definitiv interessant für Sie. Durch WebSockets kann Ihr Projekt reaktiv programmiert werden.

Ein Szenario

Sie planen eine Veranstaltung bei der Ihre Kunden selbständig per Formular Plätze buchen können und die Anzahl der Plätze ist auf 2000 Stück limitiert. Sie verschicken einen Newsletter an 40000 Abonnenten, um sie über diese Veranstaltung zu informieren. Von den Abonnenten öffnen 1000 gleichzeitig die Seite und 500 davon wollen buchen. Auf der Seite wird die Anzahl der freien Plätze angezeigt.

Normalerweise wäre dies punktuell eine hohe Belastung für den Server und alle 1000 Browser würden regelmässig beim Server die aktuelle Zahl freier Plätze anfragen, was weiterhin zu einer höheren Belastung führen würde. Je nach Server reagiert die Seite nun langsamer.

WebSockets im Einsatz

Durch WebSockets werden nach dem initialen Öffnen der Seite durch die Clients keine Anfragen mehr an den Server geschickt, es sei denn, einer der Clients füllt das Buchungsformular aus. Ansonsten herrscht keine nennenswerte Kommunikation zwischen Server und Client und der Server wird nicht sonderlich belastet. Durch die Buchung des Kunden reduziert sich nun die Anzahl der freien Plätze um zwei. Der Server schickt daraufhin die neue Zahl von 1998 Plätzen an alle 1000 offenen Browser und diese aktualisieren die Zahl.

Vorteil: Extrem geringe Reaktionszeiten und wenig Last auf dem Server. Die Clients aktualisieren die Zahl quasi sofort.

Beispiele

Ein Beispiel ist Asana. Asana ist ein Task-Management-Tool, welches die WebSockets-Technik nutzt und bei meinen Kollegen bei der Vorstellung wahre Begeisterungstürme ausgelöst hat. Seit Beginn benutzen wir dieses Tool zur Organisation unseres Unternehmens und lehren unseren Kunden agiles Marketing und agile Softwareentwicklung mit Hilfe von Asana.

Als Basis für eigene und Kundenprojekte, welche von WebSockets profitieren können, benutzen wir Meteor.js. Ein junges Framework welches die Produktionskosten deutlich senken wird.

Resümee

Viele Seiten werden von dem neuen Ansatz der WebSockets profitieren. Zwangsläufig muss die Anzahl der übertragenen Daten reduziert und Server müssen entlastet werden. Datenanzeige und -bearbeitung in Echtzeit werden Standard werden. Sollten Sie Fragen haben oder glauben, das WebSockets und reaktive Programmierung für Ihre Projekte interessant sind, so würde ich mich über eine Kontaktaufnahme freuen!