Quiero enviar datos a un ID de socket específico.
Solíamos poder hacer esto en las versiones anteriores:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
¿Cómo haría yo para hacer algo similar en Socket.IO 1.0?
Quiero enviar datos a un ID de socket específico.
Solíamos poder hacer esto en las versiones anteriores:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
¿Cómo haría yo para hacer algo similar en Socket.IO 1.0?
Respuestas:
En socket.io 1.0 proporcionan una mejor forma de hacerlo. Cada zócalo se une automáticamente a una habitación predeterminada por su propia identificación. Consultar documentos: http://socket.io/docs/rooms-and-namespaces/#default-room
Entonces puede emitir a un socket por id con el siguiente código:
io.to(socketid).emit('message', 'for your eyes only');
En socket.io 1.0 puedes hacerlo con el siguiente código:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Actualizar:
La respuesta de @ MustafaDokumacı contiene una mejor solución.
@Mustafa Dokumacı y @Curious ya proporcionaron suficiente información, estoy agregando cómo puede obtener la identificación del socket.
Para obtener la identificación del socket, use socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Si ha utilizado un espacio de nombres, descubrí que lo siguiente 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');
Más sobre espacios de nombres: http://socket.io/docs/rooms-and-namespaces/
Creo que tanto @Curious como @ MustafaDokumacı proporcionaron soluciones que funcionan bien. Sin embargo, la diferencia es que con la solución de @ MustafaDokumacı, el mensaje se transmite a una sala y no solo a un cliente en particular.
La diferencia es notable cuando se solicita un reconocimiento.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
funciona como se esperaba, mientras
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
falla con
Error: Callbacks are not supported when broadcasting
en Node.js -> socket.io -> hay un ejemplo de chat para descargar Pegue esto en la parte de línea (io en la conexión) ... uso este código que funciona al 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);
});
});