在io.sockets.on()之外的socket.send

我有一个循环,连续查询数据库。 当查询返回结果时,node.js应用程序将通过socket.io v0.8向连接到节点服务器的每个客户端发送消息。

问题: io.sockets.broadcast.send('msg')setInterval()循环的中间被调用,所以它不在io.sockets.on()的callback函数中,因此这是行不通的。 当使用io.sockets.send('msg') ,似乎没有消息发送到客户端。

Node.js代码

 setInterval(function() { util.log('Checking for new jobs...'); dbCheckQueue(function(results) { if (results.length) { io.sockets.broadcast.send('hello'); } }); }, 10*1000); 

但是,如果要从io.sockets.on('connection',..)调用setInterval ,则每个连接的客户端都将创build一个额外的循环!

Node.js代码

 io.sockets.on('connection', function(socket) { setInterval(function() { util.log('Checking for new jobs...'); dbCheckQueue(function(results) { if (results.length) { io.sockets.send('hello'); } }); }, 10*1000); }); 

客户JS

  socket.on('hello', function() { console.log('HELLO received'); }) 

*如何获得一个单循环运行,但仍然能够发送消息到所有连接的客户端?

我认为这将成功解决您的问题

 io.sockets.emit('hello')