ロングポーリングは優れた手法ですが、どのようなソリューションでも有効性はハードウェア設定を含む多くの変数に依存するため、絶対的な解決策はありません。
長いポーリングで接続を維持しています。は、多くのクライアントでパフォーマンスの問題を引き起こします。
あなたのソリューションを考慮に入れる必要があります: -
- それは(stockticker例えば)はほぼリアルタイムである必要はない
- どのくらいの頻度でAjaxのデータ/出力変更(新しいコメント対チャット)
を
- ajaxデータ/出力の変更を引き起こすイベントは、どのくらいの頻度でトリガされますか。これにより、キャッシュの生成方法が決まります。
あなたはajaxに関しては控えめでなければなりません。応答&を必要に応じて行う必要があります。 ajax実装の成功は、リクエストベースではなくイベントベースである、よく考えられたキャッシング・ソリューションがなければ、不完全なものになります。以下は
我々はプロジェクトに有用であることが分かっ手法の一つの簡易版である: -
- 行われるすべてのAjaxポーリング要求がで返されるデータのダイジェストであるoutput_hashが含まれていますサーバー。
- サーバは、好ましくはキャッシュに格納されているデータソースから、生成される出力の最近のハッシュに対して、このの出力_hashをチェックします。
- 異なる場合は、新しいコンテンツと新しいoutput_hashが表示されます。そうでなければ小さな応答/新しいコンテンツがないことを示すために変更されていない。
このソリューションでは、次のポーリング間隔の動的計算も行いました。間隔を動的に保つことで、サーバーは要求を制御できます。例えば、最初の1時間にほとんどのコメント/回答が起こったとすると、インターバル時間が1秒である点がないので、サーバは時間が増えるにつれて動的に2,3または5秒に増加させることができます間隔を2秒としてハードコーディングするよりも。同様に、古いポストに活動が慌ただしい場合、インターバル時間を短くすることができます。
アイドル状態のクライアントなどについても確認しました。
多分websockets? http://www.davesite.com/html5-code-tutorials/html5_interactive_intro_html_5/websockets/ –
@niko ajaxベースのライブアップデートを使用する場合も同じ考えをしていましたが、他の解決策は見つかりませんでした。私はそこにサーバーとの接続を確立せずに解決策があるとは思わない。最悪のシナリオでは、2から4またはそれ以上の時間間隔を増やすことができます – motto