24

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?

3 Answers 3

39

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

Sign up to request clarification or add additional context in comments.

6 Comments

How does it work with reddiss? I want to do the same thing but in a distributed load balanced environment.
for the version 1.0, we need to use io.to(socketId).emit('pm', {}); like @Minho Lee said
@budsiya did you ever get it to work? I'm working on a similar problem, where I have multiple node processes running on a single server.
@budsiya, you mean redis ?
@Francesco This is very nice but you should expand the example, to help begginers grasp the concept. Or provide some links
|
17

For socket.io version 1.0 use:

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

Comments

2

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.