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 de io.sockets.on.
  • Lorsque j'utilise io.sockets.broadcast.send('hello') à l'extérieur, j'ai l'erreur TypeError: Cannot call method 'send' of undefined
  • vous ne pouvez utiliser broadcast sur un socket, par exemple socket.broadcast.send dans un io.sockets.on-rappel. cependant, je pense que vous pouvez envoyer à tous les clients avec io.sockets.send (avec io. et sans broadcast).
  • 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 utiliser socket.emit au lieu de socket.send.
  • Si je veux envoyer un message à tous les clients à l'extérieur de la io.sockets.on fonction de rappel, est io.sockets.send() la seule fonction que je peux utiliser? Si oui, que dois-je utiliser sur le côté client au lieu de socket.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 ?

InformationsquelleAutor Nyxynyx | 2011-11-26