socket.envoyer à l'extérieur de io.les sockets.sur( )
J'ai une boucle qui des requêtes sur une base de données en permanence. Lorsque la requête retourne un résultat, l'node.js application envoie un message à tous les clients connectés au nœud serveur via socket.io v0.8.
Problème: io.sockets.broadcast.send('msg')
est appelé au milieu d'un setInterval()
boucle de sorte qu'il n'est pas dans un io.sockets.on()
's fonction de rappel et donc cela ne fonctionnera pas. Lorsque io.sockets.send('msg')
est utilisé, aucun message semble être envoyé au client.
Node.js code
setInterval(function() {
util.log('Checking for new jobs...');
dbCheckQueue(function(results) {
if (results.length) {
io.sockets.broadcast.send('hello');
}
});
}, 10*1000);
Toutefois, si le setInterval
est d'être appelé à partir de io.sockets.on('connection',..)
, chaque client connecté permettra de créer une boucle supplémentaire!
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);
});
Client JS
socket.on('hello', function() {
console.log('HELLO received');
})
*Comment puis-je obtenir une SEULE boucle pour exécuter, mais encore être en mesure d'envoyer un message à tous les clients connectés?
io.sockets
peut être consulté à l'extérieur deio.sockets.on
.- Lorsque j'utilise
io.sockets.broadcast.send('hello')
à l'extérieur, j'ai l'erreurTypeError: Cannot call method 'send' of undefined
- vous ne pouvez utiliser
broadcast
sur unsocket
, par exemplesocket.broadcast.send
dans unio.sockets.on
-rappel. cependant, je pense que vous pouvez envoyer à tous les clients avecio.sockets.send
(avecio.
et sansbroadcast
). - Il semble qu'aucun des clients peuvent recevoir il si j'utilise
io.sockets.send('hello')
- Hum. si vous souhaitez utiliser
socket.on('hello',...)
vous devez utilisersocket.emit
au lieu desocket.send
. - Si je veux envoyer un message à tous les clients à l'extérieur de la
io.sockets.on
fonction de rappel, estio.sockets.send()
la seule fonction que je peux utiliser? Si oui, que dois-je utiliser sur le côté client au lieu desocket.on('hello', ...)
- Utilisez simplement
io.sockets.emit('hello')
pour envoyer le msg. socket.io/#comment-utiliser - Génial, ça marche.
- Pourriez-vous me dire comment & où mettre la
io.sockets.emit('some_link')
dans ma question - https://stackoverflow.com/questions/45435498/how-to-use-socket-ioemit-function-outside-of-socket-function-nodejs-express ?
Vous devez vous connecter pour publier un commentaire.
Je pense que ce sera réussi à résoudre votre problème