5

サーバーからクライアントへの「プッシュ」をエミュレートするためにロングポーリングで動作するチャットアプリケーションを作成しています。

基本的には、ブラウザが更新を求めてきて、何か新しいことがあれば返信します。それ以外の場合は、返信するものがあるまで、応答せずに接続を開いたままにします。

ここで、30 秒経過しても何も送信していない場合は、基本的に "NoNews" という応答を送信します。クライアントは再度ポーリングします。

私がやりたいことは、ブラウザが単にタイムアウトして私をあきらめる前に、できるだけ長く返信せずにこの接続を維持することです...各ブラウザのクライアントタイムアウトに関する適切なドキュメントが見つかりませんでした.そして、それはすべて同じではないようです...

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

ありがとう!

4

2 に答える 2

2

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

アップデート:

XHR でのタイムアウトの検出は、何らかの理由で組み込まれていないため、実際には複雑です。もちろん、502/503 応答なども処理する必要があります。

于 2009-08-26T23:31:13.033 に答える
1

読み取りタイムアウトはブラウザによって異なります。たとえば、これらは 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

ご覧のとおり、時間の経過とともに大きくなります。

ロングポーリングでは、タイムアウトはあなたの味方です。それを避けるのではなく、それを利用するべきです。タイムアウトは、ブラウザで可能な限り長いポーリングを行っていることを意味します。タイムアウトは長いポーリングがなくても処理する必要があるエラーなので、余分な負担はありません。

この質問に対する私の回答をお読みください。

J2ME クライアントからの HTTP サーバーのポーリング

これはモバイル クライアント用ですが、ほとんどのルールは AJAX ロング ポーリングにも適用されます。具体的には、長いポーリングはイベント通知にのみ使用され、すべてのコンテンツは通常どおりプルされる通知システムの恩恵を受けると思います。

于 2009-08-27T00:09:53.593 に答える