2

サインインしたユーザーがサーバーにメッセージを送信して、3 秒ごとにオンラインであることを伝える Web ベースのアプリケーションを開発しました。その後、メッセージはサーバーによって処理され、Mysql でストアド プロシージャが呼び出されて、ユーザーのステータスがオンラインに設定されます。Comet と Ajax が比較されている同様の問題 (ここまたはここ) を調べましたが、3 秒の遅延が許容され、最大 1000 人のユーザーがシステムでオンラインになっていることを考えると、Ajax を使用するのが賢明な選択であるか、Comet を使用する必要があります。 ?

4

2 に答える 2

1

この種の機能については、comet の方が適切です。

  • クライアントがメッセージを送信します (私はオンラインです)
  • サーバーは処理されたメッセージをブロードキャストします (ユーザー X はまだオンラインです)

ajax の方法では、サーバーにメッセージを提供するだけです。

ajaxの方法で「放送効果」を得るために。コメットに似た処理を行うことになりますが、帯域幅の効率は低くなります。

アヤックス:

  • クライアント送信サーバー - 私は入っています
  • サーバープロセス
  • サーバーは、ユーザーのリストをクライアントに送り返します。

この場合、すべてのクライアントは 3 秒ごとにデータベースにCOMPLETE "in" リストを要求します。

彗星で:

  • クライアント X 送信サーバー - 私は入っています
  • サーバープロセス
  • サーバーは、ユーザー X がまだオンラインであることをクライアントSに送り返します

この場合、すべてのクライアントは 3 秒ごとに自分がいるとサーバーに伝えます。サーバーは、接続されているすべてのクライアントx がまだいるということだけを返します。

Comet は、メッセージをブロードキャストしてクライアントにプッシュする手法にすぎません。Ajax は、すべてのページを更新することなく、クライアント情報をサーバーにプッシュする手法です。

ウィキペディアの引用: http://en.wikipedia.org/wiki/Comet_%28programming%29

Comet は、 Ajax PushReverse Ajax、Two-way-Web、HTTP Streaming、HTTP サーバー プッシュなど、いくつかの名前で知られています。

だから彗星に行く:)

何もブロードキャストしない場合は、単純な Ajax が最適なオプションです。

于 2012-05-21T08:19:58.447 に答える
0

この特定のケースでは、サーバーからクライアントに情報を送信する必要がないため、Ajax がより適切なソリューションであると考えています。3 秒ごとに、クライアントはサーバーに、接続され、データベースが更新され、完了したことを通知します。

これは確かに Comet を使用して実行できます。その場合、基本的に、登録されている各クライアントに ping を実行して、まだ接続されているかどうかを確認します。ただし、応答するクライアントごとにデータベースでクエリを実行する必要があり、クライアントが最初の接続でサーバーに通知する必要があります。ですから、コメットは価値があるよりも面倒なことになると私には思えます。登録されている各クライアントに ping を実行し、応答をメモリに保存できれば、すべてのクライアントに ping を実行して、単一のクエリを実行してすべてのステータスを更新できます。これにより、タイムアウトを待つのではなく、クライアントが切断されるとすぐにわかるという追加のボーナスが得られます. 残念ながら、これは私の Comet に関する専門知識の範囲を超えているため、現時点では実際に実装することはできません。

于 2012-06-24T15:36:59.050 に答える