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

Nyx*_*nyx 22 javascript sockets node.js express socket.io

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

问题: 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);
Run Code Online (Sandbox Code Playgroud)

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

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);
});
Run Code Online (Sandbox Code Playgroud)

Clientside JS

        socket.on('hello', function() {
            console.log('HELLO received');
        })
Run Code Online (Sandbox Code Playgroud)

*如何运行SINGLE循环,但仍然能够向所有连接的客户端发送消息?

Nyx*_*nyx 28

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

io.sockets.emit('hello')
Run Code Online (Sandbox Code Playgroud)