Streaming
Von: Thomas Bayer
Datum: 18. Sept. 2018
7.1 Streaming von großen Datenmengen
Beim Streaming großer Daten verarbeitet der Empfänger bereits einen Teil der Daten, während der Sender noch dabei ist Teile zu übertragen. Da die Daten in viele kleinere Pakete aufgeteilt werden, können Daten übertragen werden, die wesentlich größer sind als der zur Verfügung stehende Hauptspeicher.
REST, GraphQL und gRPC unterstützen das Streaming von großen Daten. REST und GraphQL basieren auf HTTP-1 und verwenden dafür HTTP-Chunking. gRPC verwendet HTTP-2, welches asynchrone und nicht blockierende Kommunikation unterstützt.
7.2 Zeitversetztes Streaming
Zeitversetztes Streaming ist hilfreich, wenn z.B. der Client ständig das aktuelle Wetter benötigt. Ohne Streaming könnte der Client in kurzen Abständen ständig dieselbe Abfrage abschicken, damit ihm keine Wetteränderung entgeht.
Abbildung :
Beim Streaming erhält der Client auf eine Anfrage nicht nur eine sofortige Antwort. Seine Anfrage wird stehen gelassen und der Server kann jederzeit über den Stream eine Nachricht schicken, z.B. immer dann, wenn es eine Veränderung beim Wetter gibt. Wenn kein Interesse mehr an den Nachrichten besteht, kann der Client dem Stream schließen.
Abbildung :
Dieses Streaming widerspricht der zustandslosen Übertragung von REST und wird von REST nicht unterstützt. Nachdem ein REST-Client eine Antwort erhalten hat gibt es für den Server keine Möglichkeit Daten auf eigene Initiative an den Client zu schicken.
GraphQL unterstützt das Server-Client Streaming und gRPC unterstützt sowohl Server-Client als auch Client-Server Streaming.
REST selbst unterstützt kein zeitversetztes Streaming. Es gibt aber Möglichkeiten ein Streaming mit HTTP nachzubauen. Beispielsweise durch Long-Polling, bei dem der Server mit der Antwort einfach wartet, bis ihm irgendwann etwas einfällt. Oder durch eine Ergänzung einer Schnittstelle mit den WebSockets.