Naresh
Naresh

Reputation: 25773

socket.io - How to broadcast a message to all open sockets

I would like to broadcast a message to all open sockets as a result of a non-socket related event, e.g. as a result of a timeout. How do I do this? Should I keep an array of all open sockets and send them a message one by one? Is there a better way?

Note: The broadcasting example in socket.io guide sends a broadcast message in response to a socket connection, so it has a handle to a socket. Even then it says

Broadcasting means sending a message to everyone else except for the socket that starts it.

Edit To clarify my question - I want to "send a message" to all open sockets. This action is NOT triggered by any socket, so there is no "this socket". For example, some business logic on the server decides that an order is now executed. This information needs to be sent to all open sockets. What's the best way to do this? (This is not "broadcasting" as socket.io defines it.)

Upvotes: 4

Views: 3461

Answers (2)

Ivan Drinchev
Ivan Drinchev

Reputation: 19581

So basically you need to get all connected clients to your socket

var clients = io.sockets.clients(); // This returns an array with all connected clients

for ( i = 0; i < clients.length; i++ ) {
    clients[i].emit('event', { data: 'message' });
}

This will emit to all of your connected clients.

Upvotes: 2

ncn corp
ncn corp

Reputation: 111

socket.broadcast.emit('event name', { data : 'your data' });

It will broadcast to all open sockets, except this socket.

Upvotes: 0

Related Questions