14

比較的一定のデータベースポーリングを必要とするWebページのコンポーネントを構築しています。これには2つの異なるアプローチがありますが、そのうちの1つが他のアプローチよりも優れているのか、それとも3つ目のオプションがないのか疑問に思っています。

1)1秒または2秒ごとにAJAXリクエストを送信して、更新を確認します。新しいデータがあるかどうかに関係なく、各リクエストはすぐに返されます。
2)データを受信するかタイムアウトが発生するまで返されない単一のAJAXリクエストを起動します。これらのいずれかが発生すると、次のリクエストが発生します。(これはロングポーリングと呼ばれていると思いますか?)

データベースクエリの数はどちらでも同じですが、#2を使用すると、ブラウザから発生するリクエストが少なくなり、帯域幅とクライアントリソースを節約できます。サーバーの場合、アクティブなままでクエリ間でスリープする単一のPHPリクエストを使用するか、数秒ごとに起動してDBをポーリングしてから、シャットダウンする方がよいでしょうか。それとも違いはなく、私はこれについて強調しすぎていますか?

編集:これはより大きなウェブアプリのチャットウィジェットであることも述べる必要があると思います。チャットは二次的な機能であるため、通信がわずかに遅れてもユーザーを殺すことはありません。

4

2 に答える 2

8

長いポーリングは、ポーリングよりも拡張性が高くなります(つまり、サーバーの負荷が少なくなります)が、応答時間ははるかに長くなります。

受信者がポーリングする場合、メッセージの平均移動時間はポーリング間隔の半分になります。

長いポーリングでは、その瞬間-サーバーは何も言うことがない場合にのみ待機します。

チャットメッセージングを行っている場合は、長いポーリングを行ってください。それは使いやすさです。

長いポーリングの欠点は、実装がより複雑になることです。しかし、それほど複雑ではなく、広く実装されています。したがって、選択したWebサーバーに既成のフレームワークを使用できない場合は、合理的に作成することを開始でき、それを機能させることができます。

于 2010-10-01T18:58:59.367 に答える
2

また、最新のブラウザーの一部であるWebSocketを確認することもできます(または、ページにドロップしたFlashファイルを介してエミュレートされます)。

于 2010-10-01T18:34:40.580 に答える