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