我有一个连续查询数据库的循环。当查询返回结果时,node.js 应用程序将向通过 socket.io v0.8 连接到 Node 服务器的每个客户端发送一条消息。
问题: io.sockets.broadcast.send('msg')
在 setInterval()
循环中间被调用,所以它不在 io.sockets.on()
的回调函数中,因此这不起作用。当使用 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
,则每个连接的客户端都会创建一个额外的循环!
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');
})
*如何让 SINGLE 循环运行,但仍能向所有连接的客户端发送消息?
最佳答案
我认为这将成功解决您的问题
io.sockets.emit('hello')
关于javascript - socket.send 在 io.sockets.on() 之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281382/