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