サインインしたユーザーがサーバーにメッセージを送信して、3 秒ごとにオンラインであることを伝える Web ベースのアプリケーションを開発しました。その後、メッセージはサーバーによって処理され、Mysql でストアド プロシージャが呼び出されて、ユーザーのステータスがオンラインに設定されます。Comet と Ajax が比較されている同様の問題 (ここまたはここ) を調べましたが、3 秒の遅延が許容され、最大 1000 人のユーザーがシステムでオンラインになっていることを考えると、Ajax を使用するのが賢明な選択であるか、Comet を使用する必要があります。 ?
2 に答える
この種の機能については、comet の方が適切です。
- クライアントがメッセージを送信します (私はオンラインです)
- サーバーは処理されたメッセージをブロードキャストします (ユーザー X はまだオンラインです)
ajax の方法では、サーバーにメッセージを提供するだけです。
ajaxの方法で「放送効果」を得るために。コメットに似た処理を行うことになりますが、帯域幅の効率は低くなります。
アヤックス:
- クライアント送信サーバー - 私は入っています
- サーバープロセス
- サーバーは、ユーザーのリストをクライアントに送り返します。
この場合、すべてのクライアントは 3 秒ごとにデータベースにCOMPLETE "in" リストを要求します。
彗星で:
- クライアント X 送信サーバー - 私は入っています
- サーバープロセス
- サーバーは、ユーザー X がまだオンラインであることをクライアントSに送り返します
この場合、すべてのクライアントは 3 秒ごとに自分がいるとサーバーに伝えます。サーバーは、接続されているすべてのクライアントにx がまだいるということだけを返します。
Comet は、メッセージをブロードキャストしてクライアントにプッシュする手法にすぎません。Ajax は、すべてのページを更新することなく、クライアント情報をサーバーにプッシュする手法です。
ウィキペディアの引用: http://en.wikipedia.org/wiki/Comet_%28programming%29
Comet は、 Ajax Push、 Reverse Ajax、Two-way-Web、HTTP Streaming、HTTP サーバー プッシュなど、いくつかの名前で知られています。
だから彗星に行く:)
何もブロードキャストしない場合は、単純な Ajax が最適なオプションです。
この特定のケースでは、サーバーからクライアントに情報を送信する必要がないため、Ajax がより適切なソリューションであると考えています。3 秒ごとに、クライアントはサーバーに、接続され、データベースが更新され、完了したことを通知します。
これは確かに Comet を使用して実行できます。その場合、基本的に、登録されている各クライアントに ping を実行して、まだ接続されているかどうかを確認します。ただし、応答するクライアントごとにデータベースでクエリを実行する必要があり、クライアントが最初の接続でサーバーに通知する必要があります。ですから、コメットは価値があるよりも面倒なことになると私には思えます。登録されている各クライアントに ping を実行し、応答をメモリに保存できれば、すべてのクライアントに ping を実行して、単一のクエリを実行してすべてのステータスを更新できます。これにより、タイムアウトを待つのではなく、クライアントが切断されるとすぐにわかるという追加のボーナスが得られます. 残念ながら、これは私の Comet に関する専門知識の範囲を超えているため、現時点では実際に実装することはできません。