Socket.send за пределами io.sockets.on() - программирование
Подтвердить что ты не робот

Socket.send за пределами io.sockets.on()

У меня есть цикл, который непрерывно запрашивает базу данных. Когда запрос возвращает результат, приложение node.js отправит сообщение каждому клиенту, подключенному к серверу node через socket.io v0.8.

Проблема: io.sockets.broadcast.send('msg') вызывается в середине цикла setInterval(), поэтому она не находится в функции обратного вызова io.sockets.on(), и, следовательно, это не сработает. Когда используется io.sockets.send('msg'), сообщение не отправляется клиенту.

Node.js code

setInterval(function() {
    util.log('Checking for new jobs...');
    dbCheckQueue(function(results) {
        if (results.length) {
            io.sockets.broadcast.send('hello');
        }
    });
}, 10*1000);

Однако, если setInterval вызывается из io.sockets.on('connection',..), каждый подключенный клиент создаст дополнительный цикл!

Node.js code

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

* Как я могу запустить цикл SINGLE, но все же могу отправить сообщение всем подключенным клиентам?

4b9b3361

Ответ 1

Я думаю, что это успешно решит вашу проблему

io.sockets.emit('hello')