socket.senden außerhalb von io.sockets.auf( )
Ich habe eine Schleife, Abfragen einer Datenbank kontinuierlich. Wenn die Abfrage ein Ergebnis liefert, das node.js die app wird eine Nachricht an jeden client mit dem node-server über socket.io-v0.8.
Problem: io.sockets.broadcast.send('msg')
wird aufgerufen, in der Mitte ein setInterval()
Schleife, so dass es nicht in einem io.sockets.on()
's callback-Funktion und so wird das nicht funktionieren. Wenn io.sockets.send('msg')
verwendet wird, keine Nachricht zu sein scheint, die an den client gesendet.
Node.js code
setInterval(function() {
util.log('Checking for new jobs...');
dbCheckQueue(function(results) {
if (results.length) {
io.sockets.broadcast.send('hello');
}
});
}, 10*1000);
Jedoch, wenn die setInterval
ist aufgerufen, innerhalb io.sockets.on('connection',..)
jeden verbundenen client wird eine zusätzliche Schleife!
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);
});
Clientseitigen JS
socket.on('hello', function() {
console.log('HELLO received');
})
*Wie bekomme ich einen SINGLE-loop zu laufen, aber immer noch in der Lage sein, das senden einer Nachricht an alle angeschlossenen clients?
io.sockets
zugegriffen werden kann, die außerhalb derio.sockets.on
.- Wenn ich
io.sockets.broadcast.send('hello')
draußen, bekomme ich die FehlermeldungTypeError: Cannot call method 'send' of undefined
- Sie können nur
broadcast
auf einesocket
z.B.socket.broadcast.send
innerhalb einerio.sockets.on
-callback. ich denke jedoch, dass Sie senden können, um alle clients mitio.sockets.send
(mitio.
und ohnebroadcast
). - Es scheint, dass keiner der clients empfangen können, wenn ich
io.sockets.send('hello')
- Hum. wenn Sie verwenden möchten
socket.on('hello',...)
müssen Siesocket.emit
stattsocket.send
. - Wenn ich will schickt eine Nachricht an alle clients außerhalb des
io.sockets.on
callback-Funktion, istio.sockets.send()
die einzige Funktion, die ich verwenden kann? Wenn ja, was sollte ich verwenden, die auf der client-Seite stattsocket.on('hello', ...)
- Verwenden Sie einfach
io.sockets.emit('hello')
die msg senden. socket.io/#how-to-use - Genial, das funktioniert.
- Könnten Sie mir sagen, wie & wo die
io.sockets.emit('some_link')
in meiner Frage - https://stackoverflow.com/questions/45435498/how-to-use-socket-ioemit-function-outside-of-socket-function-nodejs-express ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass dies wird erfolgreich lösen Ihr problem