长轮询在同一浏览器中进行多次连接

时间:2012-07-06 11:32:14

标签: node.js comet long-polling

我正在尝试使用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。

浏览器有限制吗?这是怎么发生的?怎么能避免这个?

顺便说一句。我正在尝试实施长轮询聊天和通知系统。实际上请求应该通过AJAX调用。

1 个答案:

答案 0 :(得分: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服务器发送事件。