Als Entwickler bei coeno werde ich in letzter Zeit häufig an das Jahr 2005 erinnert. Damals begannen neue Web-Technologien das Internet zu revolutionieren. Aus dem noch statischen Medium, in dem Wenige mit Vielen kommunizieren entwickelte sich in wenigen Jahren eine kollaborative Plattform. Wer hätte damals geahnt, dass mit AJAX und Co webbasierte Dienste in allen Lebensbereichen Normalität werden würden. Und obwohl diese Entwicklung noch keinesfalls abgeschlossen ist, bilden Web-Technologien heute erneut den Startpunkt für tiefgreifende Veränderungen. Die Rede ist von „Real Time Web“ (Echtzeit-Web). Was das ist und worin die Unterschiede zum Internet liegen, dass wir heute kennen, will ich in diesem Post erläutern.
Wie zu Großvaters Zeiten
Die Kommunikation zwischen Client und Webserver funktioniert in der Regel noch wie in den Urtagen des World Wide Web, schließlich hat sich am zugrunde liegenden HTTP-Protokoll aus dem Jahre 1989 nichts geändert. Es ist auf kurzzeitige Verbindung ausgelegt und funktioniert grundsätzlich so: Der Client verbindet sich mit dem Server und stellt eine Anfrage (Request). Als Reaktion (Response) sendet der Server die Nachricht, beispielsweise eine HTML-Seite, zurück an den Client. Danach gehen alle Informationen dieser Verbindung verloren. Im Normalfall begegnen sich Client und Server deshalb immer wieder als „Fremde“. Ein Verbindungsaufbau vom Server zum Client ist im HTTP-Protokoll nicht vorgesehen.
Nach dem Wasserfallprinzip
Serverseitige Anwendungen sind heute allgegenwärtig. Hinter den dynamischen Inhalten in Blogs, Online-Shops und Webservices stehen Programme. Sie werden vom Server ausgeführt, wenn entsprechende Anfragen gestellt werden. Und obwohl hierfür zahlreiche Sprachen und Plattformen mit unterschiedlichen Konzepten entwickelt wurden, hat sich am eher ineffizienten, prozeduralen Funktionsprinzip nie etwas geändert. Wie bei einem Wasserfall werden die einzelnen Prozesse nacheinander ausgeführt, wobei blockierende I/O-Operationen die Ausführung immer wieder stoppen. Erst wenn sie abgeschlossen sind, kann das Programm weiter laufen. Eine unbeantwortete Datenbankabfrage kann deshalb schnell zum Absturz des gesamten Programms führen. Die maximale Anzahl gleichzeitiger Client-Verbindungen ist darüber hinaus direkt abhängig von der Leistungsfähigkeit der Server-Hardware.
Das Internet der langen Update-Zyklen
Noch entspricht unsere Erwartung im Web genau dem Zusammenspiel dieser Funktionsprinzipien. Gelernt ist schließlich gelernt. Wenn wir eine Webseite im Browser öffnen, erwarten wir, dass die Inhalte dargestellt werden. Wir erwarten nicht, dass sich Inhalt oder auch nur Teile davon selbständig aktualisieren. Stattdessen laden wir die Seite wie selbstverständlich neu. Der Browser stellt also, um beim Beispiel zu bleiben, immer nur den jeweiligen Zustand zum Zeitpunkt der Anfrage dar. Aktualisierungen sind immer daran gekoppelt, dass der Client dies durch eine neue Anfrage auslöst. Ob in der Zwischenzeit 1 Sekunde oder 1 Jahr vergangen ist, ist in diesem System irrelevant.
Will man dennoch Datenänderungen automatisch verfolgen, bieten automatisierte Anfragen in festen Zeitabschnitten bislang die einzige Möglichkeit. Hierbei hat der Nutzer die Wahl zwischen unzähligen unnötigen Server-Anfragen oder Wartezeit bis Änderungen synchronisiert sind. Mit der Verbreitung von Webservices verkürzen sich die potentiellen Update-Zeiträume jedoch stetig. Spätestens im Sekundenbereich, stehen wir mit klassischen Web-Technologien vor unlösbaren Aufgaben, wie sich in diesem Comet Thread gut nachvollziehen lässt.
Alles möglich, dank neuer Technologien
Glücklicherweise existieren mittlerweile standardisierte Lösungen für Echtzeit Kommunikation in Client-Server-Systemen. Die wichtigste Neuerung stellt dabei die Einführung von WebSockets dar, die Bestandteil der HTML5-Spezifikation sind. Im Gegensatz zum HTTP-Protokoll werden WebSocket-Verbindungen dauerhaft aufrecht erhalten. Der Server erhält damit die Fähigkeit selbständig Informationen an die verbundenen Clients zu senden (Push). WebSockets können mittlerweile relativ leicht auf allen gängigen Plattformen implementiert werden (Übersicht). Es liegt jedoch in der Natur der Sache, dass das auf extrem lange Laufzeit angelegte WebSocket-Prinzip prozedurale Sprachen und Plattformen vor erhebliche Schwierigkeiten stellen kann. Erinnern wir uns daran, dass hier eine unbeantwortete Datenbankabfrage das gesamte Programm zum Absturz bringen kann.
Die Lösung für die Anforderungen moderner und vielschichtiger Webanwendungen heißt Node.js. Es basiert auf der Javascript-Laufzeitumgebung „V8“ die von Google ursprünglich für den Chrome-Browser entwickelt wurde. Aufgrund seines für Javascript typischen „non-blocking I/O“-Prinzips unterscheidet sich Node.js fundamental von den bisher gängigen Sprachen und Plattformen. Da kein Prozess zum Stillstand der Anwendung führt, können die Hardware-Ressourcen optimal genutzt und darüber hinaus sehr viel mehr gleichzeitige Client-Verbindungen realisiert werden. Node.js eignet sich für die Umsetzung jeglicher Web- und Serveranwendung. Aus Entwicklersicht bietet sich zudem der Vorteil, dass Frontend und Backend in einer gemeinsamen Sprache (Javascript) entwickelt werden, wobei sich Code selbstverständlich wiederverwenden lässt. Viele aktuelle Entwicklertools wie npm, Grunt, Yeoman, Jade, Stylus, etc., die Entwicklern die tägliche Arbeit erleichtern, basieren zudem auf Node.js.
Und der praktische Nutzen
Wie bei jeder neuen Technologie ist auch das Potential von WebSockets derzeit noch nicht wirklich absehbar. Dennoch lassen sich bereits drei Trendlinien erkennen, auf denen das Echtzeit-Web seinen Siegeszug antreten dürfte. So bieten WebSocket-Anwendungen unschlagbare Vorteile, wenn sie dem Nutzer Informationen mit sehr geringer Lebensdauer z.B. Börsendaten ohne unnötige Verzögerung verfügbar machen. Darauf aufbauend sind beispielsweise Anwendungen für computergesteuertes Trading vorstellbar, wie sie derzeit nur großen Finanzdienstleistern vorbehalten sind. Aber auch Online-Multiplayer-Spiele gehören für mich in diese Kategorie.
Darüber hinaus wird das Echtzeit-Web kollaboratives Arbeiten in Zukunft wirklich standortunabhängig machen. Wenn mehrere Kollegen simultan an Dokumenten arbeiten, dabei alle Änderungen in Echtzeit mitverfolgen und sich parallel über einen Chat oder Video-Kanal austauschen können, bieten lange Anfahrten immer seltener einen Mehrwert. Ausgereifte Anwendungen, die diese Form der Zusammenarbeit ermöglichen, sind zumindest im Office-Bereich nicht mehr ganz neu (Google-Docs, Microsoft Office Web Apps). Allerdings setzen sie aufgrund ihrer Entwicklungsgeschichte nicht notwendigerweise auf WebSockets auf. Für vergleichbare Neuentwicklungen bieten WebSockets aus heutiger Sicht aber in jedem Fall die ideale technologische Basis. Es ist daher zu erwarten, dass in Zukunft viele neue Werkzeuge für kollaboratives Arbeiten entstehen werden und diese Form der Zusammenarbeit nicht auf Office-Dokumente beschränkt bleiben wird.
Spannend sind aus meiner Sicht aber vor allem die Entwicklungsmöglichkeiten im Bereich der sogenannten Machine-to-Machine Kommunikation (M2M). WebSockets vereinfachen den nötigen Informationsaustausch radikal, indem sie als universelles Bindeglied fungieren. Über standardisierte APIs können so verschiedenste Endgeräte miteinander kommunizieren. Das Prinzip kann genutzt werden, um in lokalen Netzwerken laufende Medieninhalte wie TV-Sendungen, Video oder Audio-Dateien zwischen verschiedenen Geräten durch „PUSH“ zu teilen. Oder im „Second-Screen“-Kontext, um Smart-TV-Geräte mittels Tablet- oder Smartphone-Apps zu steuern. Das sieht nicht nur cool aus, gegenüber der klassischen Fernbedienung mit unzähligen Funktions- und Farbtasten bieten Touchscreens durch Gestensteuerung und zusätzliche Bildschirmfläche ganz neue User Experience. Coeno hat in diesem Jahr in mehreren Projekten mitgewirkt, in denen diese Szenarien umgesetzt werden.
Natürlich beschränken sich die Möglichkeiten nicht auf den Home-Entertainment Bereich. Wann immer unterschiedliche Endgeräte in Echtzeit Informationen austauschen müssen, bieten WebSocket-Anwendungen den entsprechenden Lösungsansatz. So könnten beispielsweise vernetzte Bordcomputer in Fahrzeugen in Echtzeit vor Kollisionen mit anderen Fahrzeugen oder Geisterfahrern warnen und auf diese Weise für zusätzliche Sicherheit sorgen.
Fazit Die genannten Beispiele zeigen, wie grundlegend sich die neuen Technologien des Echtzeit Web von den bisherigen Lösungen unterscheiden. Dabei werden WebSocket-Anwendungen und serverseitiges Javascript das bisherige Internet nicht ersetzen, vielmehr entstehen (wieder einmal) neue Bereiche, in dem visionäre Ideen entwickelt und verwirklicht werden können.