ajax呼び出しを使用して、.netサーバーでロングポーリングを使用するように設定されたJavaScript Webアプリがあります。
var _listenTimeout = 5 * 60 * 1000;
//...
$.ajax({
type: "GET",
url: url,
async: true,
cache: false,
dataType: "jsonp",
timeout: _listenTimeout,
success: callback
});
ただし、ページがしばらく開いていると、サーバーへの要求が応答しなくなるという問題があります。パケットが Web ブラウザーとネットワークからサーバーに送信される間で滞留している状態にあるようです。
私は掘り下げて、いくつかのことを知っています:
- リクエストは、chrome Web 開発者ネットワーク タブ (chrome://net-internals も) と firebug に表示されるため、送信されます。リクエストのステータスは常に保留中であり、その状態で停止するだけです。
curl
同じ URL を送信するとすぐに応答が返されるため、要求 URL は正しいです。- Wiresharkを使用して検出されたパケットがないため、ネットワークを離れていません。サーバーログ(およびその側のwireshark)にも何も表示されません。
奇妙なことに、散発的に動作することもありますが、数分の遅延があります。つまり、ブラウザーのネットワーク ログは、要求が応答を受け取ったことを検出し (私の場合は 204)、wireshark は要求が送信されたことを検出します (そして、サーバーエンド)。遅延はブラウザと Wireshark の両方で同じです。つまり、リクエストが行われ、遅延が発生し、chrome が応答を検出し、wireshare が送信されたパケットを検出します。
ページのクリーン リフレッシュでも問題が修正され、同じ要求/応答がほぼ即座に発生します (関連するブラウザー ネットワークと Wireshark ログを使用)。
Chrome 21.0.1180.89 と Firefox 14.01 で試しました。
ブラウザで ajax リクエストが詰まるような、ある種のブラウザ キューはありますか? それとも、同時リクエストが多すぎるのでしょうか? 今のところわかりません...