2009-08-26 1 views
5

私は長いポーリングでサーバーとクライアント間の "プッシュ"をエミュレートするチャットアプリケーションを作っています。タイムアウトを取得せずにブラウザに応答するまでに待つことができる安全な時間は何ですか?

基本的に、ブラウザは更新を求め、新しいものがあれば返信します。それ以外の場合は、返信するメッセージがない限り、応答せずに接続を開いたままにします。

30秒経過しても何も送信していない場合は、基本的に「NoNews」と回答し、クライアントが再びポーリングします。

ブラウザがタイムアウトして私をあきらめる前に、できるだけ返信せずにこの接続を維持してください... クライアントのタイムアウト各ブラウザのためのものであり、それはそれらのすべてのために同じであるようには思われません...

長いポーリングアプリケーションを作った人はいますか?
最も長い安全なタイムアウトは何ですか?

ありがとうございます!

答えて

2

ブラウザはXHRでタイムアウトを検出し、別の要求を行う必要があります。

更新:XHRの

検出タイムアウトは、それが内蔵されていないので、何らかの理由で、実際には複雑です。もちろん、あなたはまた、読み取りタイムアウトはブラウザ間で変動し

+0

興味深いですが、どうすればいいですか? また、サーバーはこれを検出できますか? (ASP.Net 2.0)クライアントがまだ接続されているかどうかを技術的に確認できますが、これは100%正確ですか? 私の心配はこの競合状態です:クライアントはタイムアウトします。メッセージはユーザに届きます。サーバはそれがハンドルを持つ接続に送ります。メッセージはクライアントにタイムアウトしたためどこにも行きません。クライアントからの新しい要求は、空のメッセージキューが彼を待っているのを見て、メッセージが失われています。 –

+0

ソケット側に書き込もうとすると、サーバー側で、タイムアウトした接続がエラーを生成します。正確にどのようにこれを検出するかは、使用しているサーバー側の技術によって異なります。私はASP.Netにあまり慣れていません。おそらく、Response.Write(またはそれが現在のもの)は何らかのエラーを生成します。クライアント側では、余分な作業をする必要があります。私は役に立つと思われるリンクを使って回答を更新しました。 –

+0

メッセージを受け取ったときにクライアントからACKを送信させることができます。したがって、メッセージを送り返して確認応答がない場合は、再接続するまで待ち行列に残しておきます。 – kibibu

1

... 503分の502の応答などを処理する必要があります。たとえば、これらはIEのデフォルト値です

Internet Explorer 4.0 and Internet Explorer 4.01 - 5 minutes 
Internet Explorer 5.x and Internet Explorer 6.x - 60 minutes 
Internet Explorer 7 and Internet Explorer 8 - 60 minutes 

ご覧のとおり、それは時間外で大きくなります。

ロングポーリングでは、タイムアウトはあなたの友人です。あなたはそれを避けるのではなく、それを活用すべきです。タイムアウトとは、ブラウザで最大限のポーリングを実行することを意味します。タイムアウトは、長いポーリングがなくても処理しなければならないエラーなので、余分な負担はありません。あなたはこの質問への私の応答を読みたい場合があります

polling a HTTP server from J2ME client

それは、モバイルクライアントのためだとしても、ほとんどのルールはまた、AJAXロングポーリングに適用されます。具体的には、通知システムの利点があると思うので、ポーリングはイベント通知にのみ使用され、すべてのコンテンツは引き続き正常に取得されます。

+0

答えがありがとう、これはとても面白いです... どこを見つけましたか? IEのタイムアウト値は? 私はそのようなものを見つけることができませんでした... これは実際には、私の現在の典型的な待機時間は30秒+オーバーヘッドのビットですので、私のアプリケーションはIE 7/8で正しく動作していないだろう... –

+0

を参照してください。http://support.microsoft.com/kb/181050 –

+1

+1、30秒で問題が発生します。オペラもここで限界に達しています。潜在的な軽微な違いを避けるため、WebSyncでは25を使用しています。 – jvenema

関連する問題