現在、私はTornado(python)のステータスダッシュボードに取り組んでいます。外部関数が呼び出されるたびに、Webページを動的に更新する(テンプレートを再レンダリングする)必要があります。私はこれを達成する最も効率的な方法は何か不思議でしたか?似たようなもののあるチュートリアルです。関数が呼び出されるたびにサーバが押し込まれます:AjaxまたはWebSocket
答えて
実際のサーバープッシュが必要な場合は、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のような質問と回答があります。
- 1. Python:setterが呼び出されたら関数を呼び出しますか?
- 2. 呼び出されるたびにPHP関数が実行されますか?
- 3. テーブルビュー前の呼び出し関数:viewForHeaderInSection:が呼び出されました - Swift
- 4. 返品後にajaxStart関数が呼び出されました
- 5. Nodejs関数が複数回呼び出されました
- 6. ページが表示されるたびにJQuery関数を呼び出します。
- 7. mysql_queryが呼び出されるたびに関数を実行します。 (PHP)
- 8. ajax呼び出し成功関数は呼び出されません
- 9. DLLエクスポート関数が2回呼び出されました
- 10. JavaScript関数が呼び出されましたか?
- 11. 呼び出された関数が機能しません
- 12. C#フォームがロードされるたびに呼び出す関数
- 13. ユニットテストデリゲートアクションが呼び出されました
- 14. オブジェクトが呼び出されました
- 15. 引数なしでパラメータ化された関数が呼び出されます。
- 16. テンプレートフレンド関数:間違った関数が呼び出されました
- 17. 同じAjaxが2回呼び出されました.JQuery
- 18. ajaxを呼び出してC#関数を呼び出し、返されたintgerを取得します
- 19. lua_pcallで呼び出されたlua関数のエラーメッセージが失われました
- 20. AJAX Callは呼び出されるたびに+1インクリメントしています
- 21. この関数は、これが呼び出されるたびに新しいStringを作成しますか?
- 22. Pythonでキーが押されたときに関数を呼び出す方法
- 23. バインドされていない関数がJqueryで呼び出されました
- 24. データをコールバック関数に渡しますか?コールバック関数が呼び出されるたびに
- 25. 呼び出された関数から(元の関数で)javascript関数を呼び出していますか?
- 26. Ajaxはネストされたphpファイルを呼び出します
- 27. ASP.NET Enterキーを押すとjavascript関数が呼び出されます
- 28. Python:enterを押すとコードや関数が呼び出されます
- 29. onDestroyは、画面が表示されるたびに呼び出されます。
- 30. ページが読み込まれるたびにPhantomJSがすべてのAJAX呼び出しを実行しない
追加の貢献:SSEはIE以外のすべてのブラウザでサポートされていますが、既存のライブラリを使用してSSEの基本的なサポートを提供することができます。 通信が一方向(サーバーからクライアント)の場合、実装が簡単で、接続の失敗や再接続の処理を気にする必要がないため、SSEは常に賭けます。 javaを使用している場合、おそらく便利です:https://github.com/mariomac/jeasse – Mario
ありがとう!私はWebソケットを実装しようとしていますが、SSEを調べたいのですが、Python/Tornadoで使用するチュートリアルはありますか? –