I'm attempting to set up a system with sails.js to have the server broadcast messages to a set of clients. Basically:
According to the socket.io documentation, I should be able to have the clients in Group B join a "room", and then have the server broadcast to that specific room, but on the client side, the preexisting "socket" doesn't have the method "socket.join('room')". So, I tried just sending a unique event to all clients:
socket.on("connect", function(){
console.log("Client Connected");
});
socket.on("my_event", function(data){
console.log("my_event received");
});
This works fine by doing "sails.io.sockets.emit("my_event", {...})" on the server side, but isn't this sending the event to every single client? I could make the event name unique, something like "my_event_000" with an ID to specify the group, but that would still be sending events to every client unnecessarily.
Should I be using "rooms"? And if so, how?
The Sails way to do this would be to have a model backing your "Groups", and in a controller action have a socket subscribe to a group with Group.subscribe(groupId, req.socket)
. Then you can send messages to a specific group with Group.publish(groupId, data)
.
You can also subscribe to an arbitrary room name in a controller using req.listen(groupId)
, and broadcast to that room with req.broadcast(roomName, data)
.
This is all in the Sails documentation for working with Sockets!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With