Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sails.js + socket.io: Sending messages from server to clients

I'm attempting to set up a system with sails.js to have the server broadcast messages to a set of clients. Basically:

  1. A client in Group A sends an AJAX request to the server.
  2. The server processes the request and sends a message through socket to all clients of Group B.
  3. The clients of Group B receive the message through the socket and display something.

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?

like image 974
mezzanine.ak Avatar asked Oct 04 '22 01:10

mezzanine.ak


1 Answers

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!

like image 53
sgress454 Avatar answered Nov 24 '22 00:11

sgress454