[Statement 3] Realtime-Communication im Web mit dem Hyper Text Transfer Protocol und WebSockets
christoph.zimprich.uni-linz, 9. September 2016, 23:16
Mit den Anfängen der ersten Hyper Text Transfer Protocol Version (HTTP 1.0 vgl. Q1) in den frühen 1990er wurde ein Standard geschaffen, der noch heute in seinen Grundzügen im Web der de facto Standard für die Kommunikation zwischen Client und Server ist. HTTP ist ein zustandsloses Protokoll, welches per se keine einfachen Methoden zur Echtzeitkommunikation zulässt. Es gibt zwar Möglichkeiten mit verschiedenen Methoden eine Art bidirektionale Kommunikation zwischen Client und Server abzubilden versuchen, doch weisen diese Methoden erhebliche Nachteile auf. In diesem Statement werden diese alternativen Ansätze beschrieben bzw. wird auf die bidirektionale Kommunikation mit Websockets (vgl. Q2) eingegangen.
Was sind die Hürden bei der Realtime-Communication mit dem HTTP Standard
In den meisten Fällen werden vom Client Requests an den Server geschickt, welcher diese mit entsprechenden Antworten quittiert. Würde nun der Server selbstständig eine Nachricht an den Client schicken wollen, ohne das zuvor ein Request des Clients geschickt wurde, so wird diese Nachricht, je nach Konfiguration und Einsatz von Mitteln, an manchen Stellen abgefangen werden wie z.B. einer Firewall oder direkt beim Browser. Somit ist es nicht einfach möglich eine Push-Nachricht vom Server zu erhalten oder gar eine bidirektionale Verbindung aufrecht zu erhalten.
Long Polling
Long Polling beschreibt eine Variante, bei jener der Client einen Request an den Server sendet und solange wartet bis entweder ein Timeout auftritt, oder der Server eine Antwort sendet. Nach einem Timeout oder einer Antwort schickt der Client erneut einen Request an den Server um dem Server abermals die Möglichkeit einer Antwort zu geben. Somit wird eine beidseitige Kommunikation zwischen Server und Endgerät suggeriert, jedoch auf Kosten des Netzwerktraffics bzw. der Server- und Clientressourcen.
Forever-Frame
Diese Technik nutzt eine spezielle Transfermethode des Servers, welche im HTTP spezifiziert ist: Es werden Teile einer Antwort gesendet, ohne genau zu wissen wie lange die Antwort eigentlich ist oder wie viel Teile sie umfasst. Ein spezieller Header teilt dem Browser mit, dass die Antwort in mehreren Teilen aufgeteilt ist. Somit kann die Verbindung über mehr als eine Nachricht offen bleiben. Eine solche Art der Kommunikation wird normalerweise in einem verborgenen IFrame aufgebaut. Diverse Bibliotheken abstrahieren diesen Vorgang und bieten einfachen Möglichkeiten via JavaScript auf einen Antwortteil zu reagieren.
XMLHttpRequest
Das XMLHttpRequest-Objekt bietet die Möglichkeit der asynchronen Kommunikation (besser bekannt unter AJAX) hin zum Web-Server ohne die Benutzeroberfläche zu blockieren. Auch diese Technik bietet sich an, um eine bidirektionale Kommunikation zu suggerieren.
Websockets
Mit Websockets (vgl. Q2) wird versucht einen Standard für die Zweiwege-Kommunikation im Web zu schaffen. Viele moderne Software-Frameworks, welche Tools zur bidirektionalen bereitstellen setzen speziell auf diesen Standard, da es unter allen Alternativen die ressourcenschonendste Möglichkeit zur Kommunikation darstellt.
Q1: https://tools.ietf.org/html/rfc1945
Q2: https://tools.ietf.org/html/rfc6455
Alle Links wurden am 9. September 2016 aufgerufen.
0 comments :: Kommentieren