【发布时间】:2009-10-05 21:15:10
【问题描述】:
背景
我使用支持长轮询的类似 Tornado 的服务器。用户访问的每个新网页都会向服务器设置一个长轮询,如下所示:
$.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)。
- 页面 1 已加载并发出长轮询请求,现在在服务器端空闲。
- 我单击第 2 页的链接,该页面已加载并设置长轮询请求,但来自第 1 页的长轮询请求仍在服务器端空闲(根据 Fiddler)。
这意味着当点击页面时我会堆叠所有长轮询调用,因此最终会在服务器上产生大量活动连接(或者它们可能共享连接?)
我的想法
- 因为它是一个类似 Tornado 的服务器(使用 epoll),它可以处理相当多的连接。但在我看来,这一事实不可利用。我的意思是,在这种情况下,我不希望服务器超时(如果客户端消失了)。
- 我知道那些独立页面更好地使用一个共同的头部,并且只通过 ajax 调用交换内容,但我们今天使用的这种设计不是我的调用......
- 解决此问题的最佳方法可能是重新使用连接(我认为很难断开)或在浏览器离开页面后立即关闭(您单击另一个页面)。
谢谢
-- MyGGaN
【问题讨论】:
标签: ajax jquery long-polling ajax-polling