背景
我使用类似龙卷风的服务器,支持长轮询。用户来的每个新网页都会向服务器设置一个长轮询,如下所示:
$.ajax({
type: 'GET',
url: "/mylongpollurl/",
dataType: 'application/json',
success: function(json) {
// I do stuff here
},
error: function(xhr, errText, ex) {
// If timeout I send a new long-poll request
}
});
问题
我现在依赖于我从Fiddler监控从浏览器发出的所有请求(目前为FF)的数据。
这意味着我会在点击页面时堆叠所有长轮询调用,从而最终在服务器上有很多活动连接(或者他们可能共享连接?)
我的想法
- 因为它是一个类似龙卷风的服务器(使用epoll),它可以处理很多连接。但在我看来,这个事实并没有被利用。我的意思是,我不希望在这种情况下服务器上没有超时(客户端消失了)
- 我知道那些独立的页面更好地使用一个共同的头,只通过ajax调用交换内容,但我们今天使用的这个设计不是我的呼吁...
- 解决这个问题的最佳方法可能是重新使用连接(我认为很难完成)或者在浏览器离开页面后立即关闭(您点击另一个页面)。
感谢
- MyGGaN
答案 0 :(得分:4)
对于长轮询连接,您需要确保在Fiddler中设置了“Streaming”选项。否则,Fiddler将保持连接打开无限期等待响应完成。
通常,当您从一个页面导航到另一个页面时,客户端应该拆除打开的长轮询连接,从而有效地关闭连接。我说应该,因为这并不总是正常工作,例如,当您关闭IE中的弹出窗口时。