私は長いポーリングでサーバーとクライアント間の "プッシュ"をエミュレートするチャットアプリケーションを作っています。タイムアウトを取得せずにブラウザに応答するまでに待つことができる安全な時間は何ですか?
基本的に、ブラウザは更新を求め、新しいものがあれば返信します。それ以外の場合は、返信するメッセージがない限り、応答せずに接続を開いたままにします。
30秒経過しても何も送信していない場合は、基本的に「NoNews」と回答し、クライアントが再びポーリングします。
ブラウザがタイムアウトして私をあきらめる前に、できるだけ返信せずにこの接続を維持してください... クライアントのタイムアウト各ブラウザのためのものであり、それはそれらのすべてのために同じであるようには思われません...
長いポーリングアプリケーションを作った人はいますか?
最も長い安全なタイムアウトは何ですか?
ありがとうございます!
興味深いですが、どうすればいいですか? また、サーバーはこれを検出できますか? (ASP.Net 2.0)クライアントがまだ接続されているかどうかを技術的に確認できますが、これは100%正確ですか? 私の心配はこの競合状態です:クライアントはタイムアウトします。メッセージはユーザに届きます。サーバはそれがハンドルを持つ接続に送ります。メッセージはクライアントにタイムアウトしたためどこにも行きません。クライアントからの新しい要求は、空のメッセージキューが彼を待っているのを見て、メッセージが失われています。 –
ソケット側に書き込もうとすると、サーバー側で、タイムアウトした接続がエラーを生成します。正確にどのようにこれを検出するかは、使用しているサーバー側の技術によって異なります。私はASP.Netにあまり慣れていません。おそらく、Response.Write(またはそれが現在のもの)は何らかのエラーを生成します。クライアント側では、余分な作業をする必要があります。私は役に立つと思われるリンクを使って回答を更新しました。 –
メッセージを受け取ったときにクライアントからACKを送信させることができます。したがって、メッセージを送り返して確認応答がない場合は、再接続するまで待ち行列に残しておきます。 – kibibu