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 der io.sockets.on.
  • Wenn ich io.sockets.broadcast.send('hello') draußen, bekomme ich die Fehlermeldung TypeError: Cannot call method 'send' of undefined
  • Sie können nur broadcast auf eine socket z.B. socket.broadcast.send innerhalb einer io.sockets.on-callback. ich denke jedoch, dass Sie senden können, um alle clients mit io.sockets.send (mit io. und ohne broadcast).
  • 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 Sie socket.emit statt socket.send.
  • Wenn ich will schickt eine Nachricht an alle clients außerhalb des io.sockets.on callback-Funktion, ist io.sockets.send() die einzige Funktion, die ich verwenden kann? Wenn ja, was sollte ich verwenden, die auf der client-Seite statt socket.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 ?

InformationsquelleAutor Nyxynyx | 2011-11-26
Schreibe einen Kommentar