javascript - socket.send 在 io.sockets.on() 之外

标签 javascript sockets node.js express socket.io

我有一个连续查询数据库的循环。当查询返回结果时,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/

相关文章:

Javascript 返回 false,警报不起作用

javascript - 清除 Bootstrap 中的表单输入字段?

c - 套接字编程中没有主机错误的路由

javascript - 无法在 PUG/JADE 中显示用户列表

javascript - 如何使用 Zod 的 isEmail?

javascript - 使用javascript根据屏幕大小动态调整文本框的宽度

javascript - 为什么以下函数输入不适用于给定的 AngularJS 循环?

c - 套接字编程 - 为什么我们不将 sin_family 转换为网络顺序?

perl - 如何在 Perl 中测试 TCP 套接字状态?

javascript - .bind() 什么时候运行?