socket.io - broadcast to certain users

10,102

Solution 1

There are two possibilites :

1) Each socket has its own unique ID stored in socket.id. If you know the ID of both users, then you can simply use

io.sockets[id].emit(...)

2) Define your own ID (for example user's name) and use

socket.join('priv/John');

in connection handler. Now whenever you want send message only to John, you simply do

socket.broadcast.to('priv/John').emit(...)

Side note: the first solution provided cannot be scaled to multiple machines, so I advice using the second one.

Solution 2

You can use the socket.join(...) function to provide groups:

socket.on('init', function(user) {
  if (user.type == 'dog') {
    socket.join('dogs');
  }
  else {
    socket.join('cats');
  }
});

...

io.to('dogs').emit('food', 'bone'); // Only dogs will receive it
io.to('cats').emit('food', 'milk'); // Only cats will receive it
Share:
10,102
Mark Pegasov
Author by

Mark Pegasov

Updated on June 09, 2022

Comments

  • Mark Pegasov
    Mark Pegasov almost 2 years

    I need to build twosome chat, using websockets (socket.io + node.js). So, the simple example to broadcast message to all users:

    socket.on('user message', function (msg) {
        socket.broadcast.emit('user message', socket.nickname, msg);
      });
    

    But how can I broadcast it from certain user to certain user?