У меня есть цикл, который постоянно запрашивает базу данных. Когда запрос возвращает результат, приложение 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');
})
* Как я могу запустить ОДИН цикл, но при этом иметь возможность отправлять сообщение всем подключенным клиентам?