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