2016-07-27 14 views
0

現在、私はTornado(python)のステータスダッシュボードに取り組んでいます。外部関数が呼び出されるたびに、Webページを動的に更新する(テンプレートを再レンダリングする)必要があります。私はこれを達成する最も効率的な方法は何か不思議でしたか?似たようなもののあるチュートリアルです。関数が呼び出されるたびにサーバが押し込まれます:AjaxまたはWebSocket

答えて

0

実際のサーバープッシュが必要な場合は、webSocketまたはserver-sentイベントが必要です。サーバー送信イベントは非常に新しく(非常に多くのブラウザーではサポートされていないため)、実際のサーバープッシュの主なオプションはwebSocket接続です。

webSocketアーキテクチャでは、クライアントはサーバーに接続してから接続したままです。これにより、サーバーはいつでもその接続を介してクライアントにデータを送信できます。

サーバー送信イベントは類似のアーキテクチャですが、使用方法の実装の詳細は異なります。


実際のサーバープッシュにAjaxを使用する方法はありません。 Ajaxは、一般的に長いポーリングと呼ばれるものを使用して、サーバー送信のイベントをシミュレートするために使用されることがあります。このシナリオでは、クライアントがAjax呼び出しを行い、サーバはただちにAjaxリクエストにハングし、ただちに応答を返しません。この間にサーバー側のイベントが到着した場合、サーバーは応答を待っている応答を送信して応答を送信できます。クライアントは応答を受け取って処理し、次に別のAjax呼び出しを行います。ロング・ポーリングでは、しばらくしてもサーバー側のアクションが起こらなければ、Ajaxコールはタイムアウトし、クライアントは新しい接続を開始する必要があります。

ロングポーリングの接続シーケンス全体は、webSocket接続よりも一般に効率が悪いです。したがって、あなたが解決しようとしている主な問題がサーバープッシュであれば、webSocket接続は広くサポートされている最も効率的な方法でしょう。

websocket vs rest API for real time data?Ajax vs Socket.ioのような質問と回答があります。

+0

追加の貢献:SSEはIE以外のすべてのブラウザでサポートされていますが、既存のライブラリを使用してSSEの基本的なサポートを提供することができます。 通信が一方向(サーバーからクライアント)の場合、実装が簡単で、接続の失敗や再接続の処理を気にする必要がないため、SSEは常に賭けます。 javaを使用している場合、おそらく便利です:https://github.com/mariomac/jeasse – Mario

+0

ありがとう!私はWebソケットを実装しようとしていますが、SSEを調べたいのですが、Python/Tornadoで使用するチュートリアルはありますか? –

関連する問題