我有一个JavaScript的Web应用程序设置为使用长轮询与.NET服务器发送,使用Ajax调用:AJAX长轮询不从浏览器
var _listenTimeout = 5 * 60 * 1000;
//...
$.ajax({
type: "GET",
url: url,
async: true,
cache: false,
dataType: "jsonp",
timeout: _listenTimeout,
success: callback
});
然而,有一个问题,当页面已经打开了一段时间,对服务器的请求停止响应。它似乎处于一种缓冲状态,数据包在Web浏览器之间卡住,并从网络发送到服务器。
我周围挖,我知道一两件事情:
- 请求被发送,因为它表明了Chrome网上应用开发者网络选项卡上(也铬://网内部)和萤火虫。请求的状态始终处于待处理状态,并且仅在该状态下停止。
- 请求网址是正确的,因为通过
curl
发送相同的网址会立即返回响应。 - 它还没有离开我的网络,因为没有使用wireshark检测到任何数据包。服务器日志(和那边的wireshark)也不显示任何内容。
奇怪的是,有时工作断断续续,但一两分钟即的延迟,浏览器网络日志检测该请求得到响应(在我的情况下,204),和Wireshark检测该请求正在发送(并在服务器端收到)。浏览器和wireshark的延迟是相同的,即发出请求,发生延迟,然后chrome检测到响应,wirehare检测到发送的数据包。
页面的全新刷新也解决了问题,几乎立即发生相同的请求/响应(使用相关的浏览器网络和wireshark日志)。
我已经在Chrome 21.0.1180.89和Firefox 14.01上试过了。
是否有某种浏览器队列在浏览器中被ajax请求阻塞?或者也许too many concurrent requests?现在不知道...
'chrome:// net-internals'存在多久了?太棒了**! – Neal
你能详细说一下吗? Chrome显示请求正在被创建,但你从字面上没有得到任何回应......就像没有标题或任何东西一样?但是连接成功了? Wireshark根本没有显示数据包,或只是不显示你期望看到的内容?你可以在错误的界面上嗅探吗? – Brad
@Brad - 更新了更多细节的问题。希望他们回答你的所有问题,即wireshark在干净的页面刷新上检测到相同的URL请求。 – zlog