我正在尝试使用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调用。
答案 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服务器发送事件。