AJAX ポーリング頻度 - ロングポーリングするか、ロングポーリングしないか?
-
27-09-2019 - |
質問
比較的一定のデータベース ポーリングを必要とする Web ページのコンポーネントを構築しています。これには 2 つの異なるアプローチが考えられますが、そのうちの 1 つが他のものより優れているのか、それとも 3 番目のオプションが欠けているのか疑問に思っています。
1) 1 ~ 2 秒ごとに AJAX リクエストを送信して、更新を確認します。新しいデータがあるかどうかに関係なく、各リクエストはすぐに返されます。
2) データを受信するかタイムアウトが発生するまで返されない単一の AJAX リクエストを発行します。これらのいずれかが発生すると、次のリクエストが起動されます。(これをロングポーリングと呼ぶのでしょうか?)
データベース クエリの数はどちらでも同じですが、#2 ではブラウザから発行されるリクエストが少なくなり、帯域幅とクライアント リソースを節約できます。サーバーにとって、アクティブなままでクエリ間でスリープする単一の PHP リクエストを持つ方が良いでしょうか。それとも、数秒ごとに起動して DB をポーリングしてからシャットダウンするのとどちらが良いでしょうか?それとも違いはなく、私がこれについて強調しすぎているのでしょうか?
編集:これは、より大きな Web アプリのチャット ウィジェットであるとも述べるべきだと思います。チャットは二次的な機能であるため、コミュニケーションがわずかに遅れてもユーザーが死亡することはありません。
解決
はるかに良好な応答時間を与えながらロングポーリングは、ポーリングよりも(すなわち、より少ないサーバ負荷)より良好なスケールであろう。
あなたの受信者にポーリングした場合、メッセージの平均所要時間が半分あなたのポーリング間隔になります。
ロングポーリングして、その瞬間 - 何も言うことがない場合、サーバーは待機
。 あなたがチャットメッセージングを行っている場合は、、長いポールを行きます。その使いやすさの事ます。
長いポーリングと下側は、より実装する複雑さです。しかし、そのはるかに複雑、かつそれが広く実装されていないこと。あなたは選択のあなたのウェブサーバのための既製のフレームワークを使用することができないのであれば、あなたは合理的に1を書くことについて設定することができますし、作業それを取得します。