在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')