Ответ 1
Чтобы отправить сообщение конкретному клиенту, вам нужно сделать это так:
socket.broadcast.to(socketid).emit('message', 'for your eyes only');
Вот хороший маленький обманщик для сокетов:
// sending to sender-client only
socket.emit('message', "this is a test");
// sending to all clients, include sender
io.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients in 'game' room(channel), include sender
io.in('game').emit('message', 'cool game');
// sending to sender client, only if they are in 'game' room(channel)
socket.to('game').emit('message', 'enjoy the game');
// sending to all clients in namespace 'myNamespace', include sender
io.of('myNamespace').emit('message', 'gg');
// sending to individual socketid
socket.broadcast.to(socketid).emit('message', 'for your eyes only');
Кредит fooobar.com/questions/36193/...
Самый простой способ, а не отправка непосредственно в сокет, - это создать комнату для использования 2 пользователями и просто отправлять туда сообщения.
socket.join('some-unique-room-name'); // Do this for both users you want to chat with each other
socket.broadcast.to('the-unique-room-name').emit('message', 'blah'); // Send a message to the chat room.
В противном случае вам нужно будет отслеживать каждое соединение сокетов отдельных клиентов, и когда вы хотите общаться в чате, вам придется искать это соединение сокетов и выделять специально для этого, используя функцию, указанную выше. Комнаты, вероятно, проще.