「ajaxプッシュ」がどのように機能するかはよくわかりません。私は長いポーリングを知っていますが、それは同じだと思います。
長いポーリングの欠点は、サーバーが多くの未完了のリクエストを開いている可能性があることです。ソケットではなく、実際のリクエストです。ロングポーリングの考え方:
- クライアントがサーバーにリクエストを行う
- サーバーが応答しない (要求を終了しない)
- サーバーは、(クライアントに) 伝えたいことがあるまで待機します。
- サーバーが新しい情報を (別のクライアントまたは別の場所から) 受信すると、その情報をすべての待機中のクライアントに出力し (大量になる可能性があります!)、要求を終了します。
- クライアントはその情報を受け取り、すぐに別のリクエストを行います(新しいタイムスタンプやハッシュなどを使用して)
欠点: 500 のクライアントがすべてステップ 1 を実行し、他に何もしない場合、サーバーは 500 のリクエストをオープンし、情報を送信してそれらのリクエストを終了するのを待っているだけです。ほとんどのサーバーは、500 のオープン HTTP リクエストを許可していません...
お時間のある方はこちらのPDFをご覧ください。(長いですが。)
PS。利点は、サーバーが受信する HTTP リクエストが少なくなり (つまり、HTTP オーバーヘッドが少なくなる)、その情報は送信するものがある場合にのみ送信されることです (つまり、オーバーヘッドも少なくなります)。
ロングポーリングの例を編集: http://hotblocks.nl/tests/ajax/poller/ with source http://hotblocks.nl/tests/ajax/poller/callback.php?source
説明
利点: HTTP リクエストが少なくなるため、HTTP オーバーヘッドが少なくなります。ユーザーの数が静的 (実際は一定) であり、500 人であるとしましょう。
ロング ポーリングの場合: 500 人のユーザーが 1 つのリクエストを作成してから待機します.........そして、何かが変化し、500 件のリクエストすべてが (サーバーによって) 終了し、次の方法で「更新」 (新しい HTTP リクエスト) されます。クライアント。
利点: 要求が少なくなります (新しい情報ごとにユーザーごとに 1 つ)。
欠点: リクエストが長くなります (非常に長いアイドリング。これは、より多くのオープン リクエストを意味します)。
長いポーリングなし: 500 人のユーザーがリクエストを行い、サーバーは「何も新しいことはありません」と応答します。そのため、500 人のユーザーが 500 ミリ秒/1 秒/5 秒後に別のリクエストを行い、サーバーは「何も新しいことはありません」などで再び応答します。応答には何かが含まれています。それでも、クライアントはすぐに新しいリクエストを行います。
利点: 迅速に完了することができるサーバーへの迅速で短い要求。
欠点:サーバーへのこれらのリクエストの多く、多く、多く(およびすべてのHTTPリクエスト=> HTTPヘッダー=>非常に多くのオーバーヘッド)。
例の説明
例は非常に (あまりにも) 簡単です:
- あなた (クライアント) は、現在の情報を取得するためにサーバーに要求を行います
- サーバーはその情報とタイムスタンプを提供します
- クライアントは情報を受け取り、それを使用し (メッセージを表示)、タイムスタンプ付きの新しいリクエストを作成します
- サーバーは、クライアントのタイムスタンプとサーバーのタイムスタンプ (
filemtime
この場合はファイル) を比較します。
- ファイルの変更がクライアントのタイムスタンプよりも新しい場合: 新しいファイルの内容を出力します
- クライアントはその情報と新しいサーバーのタイムスタンプを受け取ります
- ステップ 3 など
ステップ 4 と 5 の間の時間が非常に長くなる場合があります。アクティブなチャットでは、そうではありません。(新しい情報は常に追加されます。) マルチプレイヤー ゲームでは、(分ではなく秒) になる場合があります。