2009-07-28 13 views
5

私はAJAX/COMETに基づいてオンラインチャットルームを作成しています。私のデザインは:さまざまなブラウザのタイムアウト動作ですか?

リクエスト

-----------------待機------------------- ------>ダンプデータを送信する

-----------------待機------------------ ------->ダンプデータを送信する

-----------------待機----------------- -------->ダンプデータを送信する

-----------------待機---------------- --------->ダンプデータを送信する

----------------- wait ------------------------->ダンプデータを送信する

------何かが起こった、応答を取得します。いくつかのイベントがある場合

別の要求 ..... ....

ご覧のように、サーバが要求を保持し、何かを待っては、起こったばかりのデータおよび終了要求をプッシュし、起こりました。その後、クライアントは別の要求を使用します。 要求にティックがあるので、2つの要求の間にイベントが発生した場合、サーバーはクライアントに対して保留中のイベントがあることを認識します。

ブラウザはタイムアウトする前に、クライアントがタイムアウトしないようにアイドルデータを送信します。

ここで問題が発生します。異なるブラウザのタイムアウトの動作は何ですか?私はブラウザがリクエストを送信し、データを待っていることを知っています、それが待つのに時間がかかりすぎると、タイムアウトになります。しかし、さまざまなブラウザーのタイムアウト動作はどうですか?そして、ブラウザのタイムアウト動作を制御できるヘッダーはありますか?ブラウザのタイムアウト動作を知ることで、私はそれらを処理する方法を決めることができます。どこのデータを見つけることができますか?

+0

この回答を見るhttp://stackoverflow.com/a/1343963/779408 – breceivemail

答えて

9

実際には、クライアントがプロキシを経由する可能性があるため、異なるブラウザのタイムアウトの明示的な値は、あなたが思っているほど多くは意味しません。

むしろ、私はあなたがタイムアウトに対処しなければならない理由を尋ねています。ブラウザにストリーミングすることで毎回それを防ぐことはできません。したがって、接続が落ちたときにクライアントからサーバーを簡単に再クエリするのが一番良いでしょう。これは、多くの人があなたがやろうとしているような長いポーリングを推奨している理由の1つです。ストリーミングソリューションを選択するか長いポーリングを選択するかにかかわらず、接続のリセットを許可する必要があります。

シンプルな隠しiframeクライアントのセットアップでは、it's not too hard to do - これは、使用しているクライアントサイドフレームワークに応じて、XHR要求にも同様に簡単です。

ほとんどの最新のブラウザのタイムアウトは、IE(60分、Wow)ではrather large、FFでは約(config:300秒 - eek)と短いと思われますが、それはあなたを助けませんプロキシは、プロキシ管理者の設定に応じて、タイムアウトが2分以下になることがあります。

要約すると、タイムアウトが発生します。あなたはそれらを止めることはできません。クライアントが発生したときに再接続するようにコードを書いてください(サーバーのスピンを抑えるための制限があります)。さらに心配する必要はありません。より堅牢であることに加えて、すべてのクライアントに無駄なデータを定期的に送信することはないため、コードをより効果的にするでしょう。