tutorial socket rooms example espaƱol node.js socket.io message

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'');