socket.send вне io.sockets.on () - PullRequest
       17

socket.send вне io.sockets.on ()

20 голосов
/ 27 ноября 2011

У меня есть цикл, который постоянно запрашивает базу данных. Когда запрос возвращает результат, приложение 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);

Однако, если 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);
});

Clientside JS

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

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

1 Ответ

26 голосов
/ 27 ноября 2011

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

io.sockets.emit('hello')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...