2016-07-27 12 views

Antwort

0

Wenn Sie einen tatsächlichen Server-Push wünschen, benötigen Sie entweder webSocket- oder Server-send-Ereignisse. Da serverseitige Ereignisse sehr neu sind (und in sehr vielen Browsern nicht unterstützt werden), ist Ihre Hauptoption für den tatsächlichen Server-Push eine webSocket-Verbindung.

In der webSocket-Architektur verbindet sich der Client mit dem Server und bleibt dann verbunden. Dadurch kann der Server jederzeit über diese Verbindung Daten an den Client senden.

Server gesendet Ereignisse sind eine ähnliche Architektur, aber mit verschiedenen Implementierungsdetails für die Verwendung.


Es gibt keine Möglichkeit, Ajax für den tatsächlichen Server-Push zu verwenden. Ajax wird manchmal dazu verwendet, Server-gesendete Ereignisse zu simulieren, indem das verwendet wird, was üblicherweise lange Abfragen genannt wird. In diesem Szenario führt ein Client einen Ajax-Aufruf aus, und der Server hängt nur für eine Weile an der Ajax-Anforderung und gibt nicht sofort eine Antwort zurück. Wenn während dieser Zeit ein serverseitiges Ereignis eintrifft, kann der Server die Verbindung annehmen, die auf eine Antwort wartet, und eine Antwort senden. Der Client erhält die Antwort, verarbeitet sie und macht dann einen weiteren Ajax-Anruf. Wenn bei einer langen Abfrage nach einer Weile keine serverseitige Aktion auftritt, wird der Ajax-Anruf abgebrochen und der Client muss eine neue Verbindung herstellen.

Die gesamte Verbindungssequenz mit langem Polling ist im Allgemeinen weniger effizient als eine webSocket-Verbindung. Also, wenn das primäre Problem, das Sie zu lösen versuchen, Server-Push ist, dann wird wahrscheinlich eine WebSocket-Verbindung der effizienteste Weg sein, dies zu tun, der weithin unterstützt wird.

Hier sind einige ähnliche Fragen und Antworten, die weitere Diskussion enthält: websocket vs rest API for real time data? und Ajax vs Socket.io.

+0

Nur ein zusätzlicher Beitrag: SSE wird auf allen Browsern mit Ausnahme von IE unterstützt, aber Sie können vorhandene Bibliotheken verwenden, um grundlegende Unterstützung für SSE bereitzustellen. Wenn die Kommunikation in einer Richtung (Server zu Client) ist, wette ich immer für SSE, da es einfacher zu implementieren ist und Sie sich nicht um Verbindungsfehler kümmern müssen und die Wiederverbindung behandeln müssen. Wenn Sie Java verwenden, ist dies vielleicht nützlich: https://github.com/mariomac/jeasse – Mario

+0

Vielen Dank! Ich arbeite gerade an der Implementierung der Web-Sockets, aber ich würde gerne in SSE schauen, weißt du von irgendwelchen Tutorials, um es mit Python/Tornado zu benutzen? –