22

I want to "emit" a message to a particular client which is selected based on another message received in a different client, How do I do this?

I am thinking of joining each client to their own "room" and then broadcast. Is there a better way?

srinathhs
  • 1,898
  • 4
  • 18
  • 33

4 Answers4

36

UPDATE for socket.io version 1.0 and above

io.to(socketid).emit('message', 'whatever');

For older version:

You can store each client in an object as a property. Then you can lookup the socket based on the message:

var basket = {};

io.sockets.on('connection', function (socket) {
  socket.on("register", function(data) {
    basket[data.nickname] = socket.id;
  });
  socket.on("privmessage", function(data){
    var to = basket[data.to];
    io.sockets.socket(to).emit(data.msg);
  });
});

Not tested...but it should give you an idea

Francesco Laurita
  • 23,226
  • 8
  • 54
  • 63
17

For socket.io version 1.0 use:

io.to(socketid).emit('message', 'whatever');
Yoav Kadosh
  • 4,381
  • 4
  • 37
  • 56
Minho Yi
  • 210
  • 2
  • 6
1

Emitting to a particular client using a socketID.

Server/ package: socket.io:

io.to(socketID).emit('testEvent', 'yourMessage');

Client/ package socket.io-client:

io.sockets.on('connection',(socket) => {
  socket.on("testEvent", data => {
    console.log(data);
  });
});

You can get access the socketID in the following manner:

io.on('connection', (socket, next) => {
    const ID = socket.id // id property on the socket Object
})

It is simply a property on the socket object

Willem van der Veen
  • 27,075
  • 15
  • 160
  • 135
0

For socket.io v1.0< use:

io.to(socketID).emit('testEvent', 'yourMessage');

assembler
  • 2,552
  • 8
  • 34
  • 65