現在、私は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. firebaseクラウド関数が複数回呼び出されました
- 6. Nodejs関数が複数回呼び出されました
- 7. ページが表示されるたびにJQuery関数を呼び出します。
- 8. mysql_queryが呼び出されるたびに関数を実行します。 (PHP)
- 9. ajax呼び出し成功関数は呼び出されません
- 10. Jestという関数が呼び出されました
- 11. DLLエクスポート関数が2回呼び出されました
- 12. Django UpdateView get_context_data関数が2回呼び出されました
- 13. 子コンポーネントでcheck関数が呼び出されました
- 14. Golang mocking関数が2回呼び出されました
- 15. nodejsで関数が2回呼び出されました
- 16. JavaScript関数が呼び出されましたか?
- 17. 呼び出された関数が機能しません
- 18. C#フォームがロードされるたびに呼び出す関数
- 19. ユニットテストデリゲートアクションが呼び出されました
- 20. オブジェクトが呼び出されました
- 21. 引数なしでパラメータ化された関数が呼び出されます。
- 22. テンプレートフレンド関数:間違った関数が呼び出されました
- 23. 同じAjaxが2回呼び出されました.JQuery
- 24. 関数は呼び出されるたびに動作します
- 25. ngrx:reducers関数が呼び出されたときにどのように呼び出されますか?
- 26. ajaxを呼び出してC#関数を呼び出し、返されたintgerを取得します
- 27. lua_pcallで呼び出されたlua関数のエラーメッセージが失われました
- 28. tkinter:ボタンを押したときに関数が呼び出されない
- 29. AJAX Callは呼び出されるたびに+1インクリメントしています
- 30. この関数は、これが呼び出されるたびに新しいStringを作成しますか?
追加の貢献:SSEはIE以外のすべてのブラウザでサポートされていますが、既存のライブラリを使用してSSEの基本的なサポートを提供することができます。 通信が一方向(サーバーからクライアント)の場合、実装が簡単で、接続の失敗や再接続の処理を気にする必要がないため、SSEは常に賭けます。 javaを使用している場合、おそらく便利です:https://github.com/mariomac/jeasse – Mario
ありがとう!私はWebソケットを実装しようとしていますが、SSEを調べたいのですが、Python/Tornadoで使用するチュートリアルはありますか? –