Я хочу отправить данные на один конкретный идентификатор сокета.
Раньше мы могли это делать в более старых версиях:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Как мне сделать что-то подобное в Socket.IO 1.0?
Я хочу отправить данные на один конкретный идентификатор сокета.
Раньше мы могли это делать в более старых версиях:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Как мне сделать что-то подобное в Socket.IO 1.0?
Ответы:
В socket.io 1.0 они предоставляют лучший способ для этого. Каждый сокет автоматически присоединяется к комнате по умолчанию по собственному идентификатору. Проверьте документы: http://socket.io/docs/rooms-and-namespaces/#default-room
Таким образом, вы можете отправить в сокет по идентификатору со следующим кодом:
io.to(socketid).emit('message', 'for your eyes only');
В socket.io 1.0 это можно сделать с помощью следующего кода:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Обновить:
Ответ @ MustafaDokumacı содержит лучшее решение.
@Mustafa Dokumacı и @Curious уже предоставили достаточно информации, я добавляю, как вы можете получить идентификатор сокета.
Чтобы получить идентификатор сокета, используйте socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Если вы использовали пространство имен, я обнаружил, что работает следующее:
//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/
Я считаю, что и @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
в Node.js -> socket.io -> есть пример чата для загрузки Вставьте это в строку (io при подключении). Я использую этот код, который работает на 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);
});
});