Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

socket.send outside of io.sockets.on( )

socket.send outside of io.sockets.on( )

Problem

I have a Loop that querys a database continuously. When the query returns a result, the node.js app will send a message to every client connected to the node server via socket.io v0.8.

Problem: io.sockets.broadcast.send('msg') is called in the middle of a setInterval() loop so it is not within an io.sockets.on()'s callback function and thus this will not work. When io.sockets.send('msg') is used, no message seems to be sent to the 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);

However, if the setInterval is to be called from within io.sockets.on('connection',..), every connected client will create an additional loop!

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');
        })

*How can I get a SINGLE loop to run, but still be able to send a message to all connected clients?

Problem courtesy of: Nyxynyx

Solution

I think that this will successfully solve your problem

io.sockets.emit('hello')
Solution courtesy of: Nyxynyx

Discussion

View additional discussion.



This post first appeared on Node.js Recipes, please read the originial post: here

Share the post

socket.send outside of io.sockets.on( )

×

Subscribe to Node.js Recipes

Get updates delivered right to your inbox!

Thank you for your subscription

×