node.js - rooms - Mensaje privado de socket.io
socket.io php (4)
He estado recorriendo la red sin suerte. Estoy intentando descubrir cómo enviar un mensaje privado de un usuario a otro. Hay muchos fragmentos, pero no estoy seguro de la interacción cliente / servidor. Si tengo el ID del socket al que deseo enviarlo, ¿cómo lo envío al servidor y cómo me aseguro de que el servidor solo envíe el mensaje a ese receptor?
¿Hay algún tutorial o tutorial que todos conozcan?
en el uso de socket.io 1.0
io.sockets.connected[<socketid>]
puedes almacenar solo el id del socket. al igual que:
var users = {};
users[USER_NAME] = socket.id;
entonces:
io.sockets.connected[users[USER_NAME]]
.emit(''private'', {
msg:''private message for user with name ''+ USER_NAME
});
Aquí hay un fragmento de código que debería ayudar
Lado del cliente (enviar mensaje)
socket.emit("private", { msg: chatMsg.val(), to: selected.text() });
donde ''a'' se refiere a la identificación para enviar mensajes privados y ''msg'' es el contenido
Lado del cliente (recibir mensaje)
socket.on("private", function(data) {
chatLog.append(''<li class="private"><em><strong>''+ data.from +'' -> ''+ data.to +''</strong>: ''+ data.msg +''</em></li>'');
donde chatLog es un div que muestra los mensajes de chat
Lado del servidor
client.on("private", function(data) {
io.sockets.sockets[data.to].emit("private", { from: client.id, to: data.to, msg: data.msg });
client.emit("private", { from: client.id, to: data.to, msg: data.msg });
});
La manera más fácil que puedo pensar es tener un hash de todos los usuarios al usar su id o nombre como clave y tener su socket como parte del valor, cuando quieres enviar un mensaje solo a ellos, extrae ese socket y emitir en él ... algo como esto:
users[toUser].emit(''msg'',"Hello, "+toUser+"!");
No se necesita tutorial Las preguntas frecuentes de Socket.IO son bastante sencillas en este caso:
socket.emit(''news'', { hello: ''world'' });
EDITAR: las personas se vinculan a esta pregunta cuando preguntan cómo obtener ese objeto de socket
más adelante. No hay necesidad de. Cuando un nuevo cliente se conecta, guarde una referencia a ese socket en cualquier objeto en el que esté manteniendo su información de usuario. Mi comentario de abajo:
En la parte superior de su script en algún lugar, configure un objeto para contener la información de sus usuarios.
var connectedUsers = {};
En su función
.on(''connection'')
, agregue ese socket a su nuevo objeto.connectedUsers[USER_NAME_HERE] = socket;
Entonces puedes recuperarlo fácilmente más tarde.connectedUsers[USER_NAME_HERE].emit(''something'', ''something'');