2

この投稿では、XMPP の使用法について読みました。この種のことは必要ですか、そしてもっと重要なことに、私の主な質問は拡張されています:チャット サーバーとクライアントは、標準の HTTP とブラウザー テクノロジ(PHP と JS、または RoR と JS など) だけを使用して効率的に構築できますか? それとも、XMPP のような古いプロトコルに固執し、それらをアプリケーションに統合する方法を見つけるのが最善でしょうか?

LiveHTTPHeaders と Firebug を介してCampFireを約 5 分間調べたところ、別のチャットが発生するまで応答されないリクエストを送信するために Ajax が使用されているようです。これは、CampFire がサーバー上で新しいスレッドを開いて更新をリッスンし、スレッドが更新を聞いたときに要求に応答を返すだけですか? 彼らが特定のポートでリクエストしていることに気づきました(8043メモリが私に役立つ場合)。これにより、私が言及したことよりも複雑なことをしていると思います。また、要求された URL が開始され、/tcp/興味深いことがわかりました。

注:すべての部屋を合わせて同時に 150 人を超えるユーザーがライブチャットすることはないと思います。何千人もの同時ユーザーがいる CampFire のようなホステッド ペイ フォー チャット サービスを構築している場合、特別なテクノロジの研究に時間を費やすのではなく、アプリで単純な方法で車輪を再発明するのが当然であることを理解しています。

また、サーバーのポーリングでそれを行う場合、サーバーを非難することなく応答を最大化するために、どのくらいの頻度で個人的にポーリングしますか?

4

2 に答える 2

4

このテクノロジーは一般にCometと呼ばれていますが、これはおそらく Ajax 1の陽気な駄洒落です。

XmlHTTPResponse バリアントが最も人気があるようです。

XHR バージョンは厳密にはポーリング自体ではありません。あなたが言ったように、クライアントは長いタイムアウトで接続し、サーバーは送信するものがあるまで実際に応答を送信しません。応答が送信されると、接続がドロップされ、クライアントが再接続します。クライアントが接続を開始しているため、ロングポーリングと呼ばれますが、何も変更されていない場合でも、クライアントが常に新しいコンテンツを要求して接続するわけではないという点で、従来のポーリングとは異なります (つまり、「メッセージは今ありますか? いいえ? どうやって?今は?今は?」)

それは、常にドロップしている接続を開いたままにしようとするようなものです。

はい、標準の Web テクノロジを使用して完全に構築できます。


1私は Ajax をクリーニング製品ではなく強力なギリシャの戦士と考える方が好きなので、このしゃれにはひどく眉をひそめます。

于 2010-04-07T05:55:12.567 に答える
1

それはまず、Web サーバーの負荷分散の戦略に依存します。ステートレス メディア (HTTP) を介してデータを公開する 150 人の同時ユーザーは、少しのスクリプト (クライアント側とサーバー側) で確かに効率的です。チャット アプリケーションは、多数のクライアント -> 1 つのサーバー戦略であり、Web に完全に適合することを忘れないでください。

于 2010-04-07T06:02:35.520 に答える