套接字.在io.sockets之外发送.在()

socket.send outside of io.sockets.on( )

本文关键字:io sockets 套接字      更新时间:2023-09-26

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

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

<

node . js代码/strong>

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代码/strong>

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);
});

Clientside JS

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

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

我想这会成功地解决你的问题。

io.sockets.emit('hello')

改进@Nyxynyx之前的回答

io.sockets.emit('hello')

相当于:

io.of('/').emit('hello');

如果需要其他路由,请修改of功能参数。

文档:https://socket.io/docs/v3/server-api/index.html服务器套接字