node.js - 将数据推送到客户端 - 只能连接一个客户端?

时间:2010-12-05 20:28:53

标签: node.js comet

我正在尝试创建一个服务器端解决方案,它通过node.js定期将数据推送到客户端(无客户端轮询)。连接应该永久打开,每当服务器有新数据时,它就会将其推送到客户端。

这是我的简单示例脚本:

var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    sys.puts('Start sending...');

    setInterval(function(){
        res.write("<script type='text/javascript'>document.write('test<br>')</script>");
    }, 10000);
}).listen(8010);

这基本上有效,但似乎一次只能连接一个客户端。

如果我用浏览器打开http://127.0.0.1:8010/,我会看到每10秒写一次新输出。但是当我用相同的URL打开另一个选项卡时,它只会永远加载。只有当我关闭第一个标签时,才会从服务器获取该标签。

为了服务多个客户端,我需要做什么?

3 个答案:

答案 0 :(得分:3)

您应该使用socket.io。它为您处理所有繁重的工作,是一个非常酷的库。

答案 1 :(得分:3)

这绝对是一个错误,会发生的事情是,由于keep-alive和HTTP / 1.1以及Node搞砸了,浏览器会重新使用相同的连接。

你可以在Opera11中看到这个,打开页面两次,它是完全相同的页面,使用完全相同的连接。

卷曲和未设置Connection: keep-alive的所有内容都可以正常工作,但浏览器无法两次打开同一页面。虽然你可以打开'localhost:8010'和'localhost:8010 / foo',但它可以在两个页面上运行。

注意:这只会影响GET次请求,POST请求工作正常,因为没有重新使用连接。

我已就此提交了issue

答案 2 :(得分:1)

小心这个!

node.js 非阻止,但同时一次只能处理1个连接。你所做的是将节点置于死状态,这就是你在关闭第一个客户端时看到第二个客户端数据的原因。

相关问题