2

最終的に 8 分以上かかる http リクエストを作成しています。私にとって、この長時間実行されるリクエストは正常に機能します。問題なくブラウザに応答を返すことができます。(私はサーバーと同じネットワーク上にいます)。

ただし、一部のユーザーでは、ブラウザーがまったく応答を返しません。(注: 同じ http 要求が 1 分で実行されると、これらのユーザーは問題なく応答を確認できます)

これらのユーザーはたまたま別のネットワークにいます。そして、それらの場所とサーバーの間にファイアウォールが 1 つまたは 2 つある可能性があります。

彼らのフィドラーで、リクエストが応答を待っているだけであることがわかります。

私は今、ファイアウォールがアイドル状態の http 接続を強制終了していると想定しています..しかし、よくわかりません。

応答が返ってこない理由、または接続が切断されない理由がわかれば、非常に役に立ちます。

また、サーバーにリクエストを送信 (フラッシュ) した後でも、何らかの方法でサーバーへのダミー信号の送信を維持するアプレットを作成することで、この問題を修正することは可能ですか?

4

3 に答える 3

2

ユーザーは、接続追跡ファイアウォール/NAT ゲートウェイの背後にいる可能性があります。このようなゲートウェイは、一定期間何も起こらないと TCP 接続を切断する傾向があります。カスタム プロトコルでは、ある種のハートビート メッセージを送信して TCP 接続を維持することができますが、HTTP を使用すると、その接続を適切に制御できません。また、HTTP は、tcp 接続を「維持」するために必要なものを容易にしません。

HTTP リクエストによって開始された長時間実行されるジョブを処理する通常の方法は、そのジョブをバックグラウンドで起動し、適切な応答をクライアントにすぐに送り返し、アプレット/ajax リクエストでそのジョブのステータスをポーリングし、次の場合に結果を返すことです。終わった。

迅速な修正が必要な場合は、サーバーとユーザーの間のゲートウェイでタイムアウトを制御できるかどうかを確認してください。

于 2009-10-29T22:54:52.580 に答える
0

ユーザーが HTTP タイムアウトのあるブラウザーを使用している可能性があることを考慮しましたか?これにより、ブラウザーは一定時間後に応答の待機を停止します。

于 2009-10-29T22:29:13.937 に答える