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

最佳答案

可能是浏览器正在等待响应。请立即尝试仅发送邮件头:

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

另一个提示:如果您要使用长轮询,我建议您查看Server-Sent Events。有相当广泛的浏览器支持这一点,也有一个polyfill旧的浏览器。这里有一个example in CoffeeScript显示如何从node.js服务器发送事件。

07-24 22:21