Quero enviar dados para um ID de soquete específico.
Costumávamos fazer isso nas versões mais antigas:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Como eu faria algo semelhante no Socket.IO 1.0?
Quero enviar dados para um ID de soquete específico.
Costumávamos fazer isso nas versões mais antigas:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Como eu faria algo semelhante no Socket.IO 1.0?
Respostas:
No socket.io 1.0 eles fornecem uma maneira melhor para isso. Cada soquete automaticamente se junta a uma sala padrão por auto-identificação. Verifique os documentos: http://socket.io/docs/rooms-and-namespaces/#default-room
Portanto, você pode emitir para um soquete por id com o seguinte código:
io.to(socketid).emit('message', 'for your eyes only');
No socket.io 1.0, você pode fazer isso com o seguinte código:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Atualizar:
A resposta de @MustafaDokumacı contém uma solução melhor.
@Mustafa Dokumacı e @Curious já forneceram informações suficientes, estou adicionando como você pode obter a id do soquete.
Para obter o id do soquete, use socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Se você usou um namespace, descobri que o seguinte funciona:
//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');
Mais sobre namespaces: http://socket.io/docs/rooms-and-namespaces/
Acredito que @Curious e @ MustafaDokumacı forneceram soluções que funcionam bem. A diferença é que, com a solução de @MustafaDokumacı, a mensagem é transmitida para uma sala e não apenas para um cliente específico.
A diferença é evidente quando um reconhecimento é solicitado.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
funciona como esperado, enquanto
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
falha com
Error: Callbacks are not supported when broadcasting
no Node.js -> socket.io -> existe um exemplo de chat para baixar a parte Cole isso na linha (io na conexão) .. eu uso esse código que funciona 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);
});
});