2011-10-31 23 views
8

Estoy usando node.js y socket.io para crear una aplicación de chat. Cómo enviar un mensaje a otro socket, conozco el id del socket o el nombre de usuario solamente. No hay habitaciones, los clientes chatean uno a uno.Enviando mensaje a un socket único

Respuesta

21

Con Socket.IO, no está limitado a usar únicamente el objeto socket dentro de la devolución de llamada de la función de conexión. Puede crear un objeto que almacene el objeto de socket para un nombre de usuario particular y buscar el socket para enviar un mensaje cuando un cliente emita un mensaje. Debería transmitir el objetivo deseado con cada mensaje.

Ejemplo:

var sockets = {}; 

... 

io.on('connection', function(socket){ 
    socket.on('set nickname', function (name) { 
     sockets[name] = socket; 
    }); 
    socket.on('send message', function (message, to) { 
     sockets[to].emit(message); 
    }); 
}); 

Ver más ejemplos en la examples page of Socket.IO's website.

+0

grande, que es la solución –

+0

Cómo manejar "a" es no pertenece a ningún apodo? Por ejemplo; El apodo "A" es enviar mensaje al Apodo "B", el apodo "B" es enviar mensaje a Apodo "C". Y no hay Apodo "C" Entonces da error = "no se puede leer la propiedad 'emitir' de indefinido" – drojokef

0

Puede comprobar la propiedad nombre de usuario de todos los zócalos de esta manera:

socket.on('send message', function(message,to){ 

    io.sockets.clients().forEach(function (socket) { 

     if (socket.username==to){socket.emit(message);} 

    }); 

}); 
Cuestiones relacionadas