Отправка сообщения на определенный идентификатор в Socket.IO 1.0

Я хочу отправить данные одному идентификатору сокета.

Раньше мы могли это сделать в более старых версиях:

io.sockets.socket(socketid).emit('message', 'for your eyes only');

Как я мог бы сделать что-то подобное в Socket.IO 1.0?

Ответ 1

В socket.io 1.0 вы можете сделать это со следующим кодом:

if (io.sockets.connected[socketid]) {
    io.sockets.connected[socketid].emit('message', 'for your eyes only');
}

Update:

@Ответ MustafaDokumacı содержит лучшее решение.

Ответ 2

В socket.io 1.0 они обеспечивают лучший способ для этого. Каждый сокет автоматически присоединяется к комнате по умолчанию с помощью идентификатора self. Проверьте документы: http://socket.io/docs/rooms-and-namespaces/#default-room

Таким образом, вы можете испускать сокет по id со следующим кодом:

io.to(socketid).emit('message', 'for your eyes only');

Ответ 3

@Mustafa Dokumacı и @Curious уже предоставили достаточно информации, я добавляю, как вы можете получить идентификатор сокета.

Чтобы получить идентификатор сокета, используйте socket.id:

var chat = io.of("/socket").on('connection',onSocketConnected);

function onSocketConnected(socket){
   console.log("connected :"+socket.id);  
}

Ответ 4

Если вы использовали пространство имен, я обнаружил, что работает следующее:

//Defining the namespace <br>
var nsp = io.of('/my-namespace');

//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');

Подробнее о пространствах имен: http://socket.io/docs/rooms-and-namespaces/

Ответ 5

Я считаю, что и @Curious, и @MustafaDokumacı предоставили решения, которые хорошо работают. Разница в том, что с решением @MustafaDokumacı сообщение транслируется в комнату, а не только для конкретного клиента.

Разница заметна при запросе подтверждения.

io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});

работает как ожидалось, а

io.to(socketid).emit('message', 'for your eyes only', function(data) {...});

не работает с

Error: Callbacks are not supported when broadcasting

Ответ 6

в Node.js → socket.io → есть пример чата для загрузки Вставьте эту часть в строке (io on connection).. Я использую этот код, который работает на 100%

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log(socket.id);
    io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
  });
});