2012-07-06 63 views
3

我试图使用NodeJS实现长轮询技术。在同一浏览器中进行多个连接的长轮询

我有这个基本代码部署在服务器上。

http = require('http'); 

function onRequest(request, response) { 
    console.log('onRequest reached'); 
} 

http.createServer(onRequest).listen(8080); 
console.log('Server has started.'); 

当请求localhost:8080时,会触发onRequest。当这个连接处于活动状态时,我在第二个选项卡中请求相同的页面,但onRequest未被触发。但是,当第一个连接仍处于“长时间轮询”状态时,从另一个浏览器请求相同的页面会触发onRequest。

浏览器有什么限制吗?这是怎么发生的?如何避免这种情况?

btw。我正在尝试实施长轮询聊天和通知系统。实际上,请求应该由AJAX调用完成。

回答

3

这可能是浏览器正在等待响应。尝试只发送标题,立刻道:

function onRequest(request, response) { 
    response.writeHead(200, {'Content-Type': 'text/html'}); 
    console.log('onRequest reached'); 
} 

另一个秘诀:如果你要使用长轮询,我建议你看看Server-Sent Events。浏览器支持的浏览器非常广泛,旧版浏览器也有polyfill。这里是一个example in CoffeeScript,展示了如何从node.js服务器发送事件。

+0

立即发送标题没有帮助。 – 2012-07-06 11:53:52

+3

好的。具体如下:根据HTTP/1.1规范,浏览器最多只能同时打开2个连接到同一台服务器。我不确定你的麻烦来自第一个请求'/'和'/ favicon.ico'的窗口,或者其他的东西......无论如何,这对于长轮询来说是一个很大的缺点。 – 2012-07-06 12:01:07

+0

哦。我也读了大约2个连接限制。但忘了/favicon.ico :)现在我需要避免这种情况。 Facebook与他聊天的内容是什么? – 2012-07-06 12:15:06

相关问题