Estoy comenzando con socket.io + node.js, sé cómo enviar un mensaje localmente y transmitir la socket.broadcast.emit()
función: - todos los clientes conectados reciben el mismo mensaje.
Ahora, me gustaría saber cómo enviar un mensaje privado a un cliente en particular, me refiero a un socket para un chat privado entre 2 personas (flujo de cliente a cliente). Gracias.
Respuestas:
Cuando un usuario se conecta, debe enviar un mensaje al servidor con un nombre de usuario que debe ser único, como un correo electrónico.
Un par de nombre de usuario y socket deben almacenarse en un objeto como este:
En el cliente, emita un objeto al servidor con los siguientes datos:
En el servidor, escuche los mensajes. Cuando se recibe un mensaje, emita los datos al receptor.
En el cliente, escuche las emisiones del servidor llamado 'mensaje recibido' y, al leer los datos, puede controlar de quién provienen y el mensaje que se envió.
fuente
Puede utilizar salas socket.io. Desde el lado del cliente, emita un evento ("unirse" en este caso, puede ser cualquier cosa) con cualquier identificador único (correo electrónico, id).
Lado del cliente:
Ahora, desde el lado del servidor, use esa información para crear una sala única para ese usuario.
Lado del servidor:
Entonces, ahora todos los usuarios se han unido a una sala con el nombre del correo electrónico del usuario. Entonces, si desea enviar un mensaje a un usuario específico, solo tiene que
Lado del servidor:
Lo último que queda por hacer en el lado del cliente es escuchar el evento "new_msg".
Lado del cliente:
Espero que captes la idea.
fuente
socket.io-redis
.{email: [email protected]}
diferente para todas las conexiones? ¿No todos los clientes que van a la aplicación tienen un usuario?[email protected]
¿ Cómo puedo convertirlo en usuario[email protected]
para el segundo cliente que se conecta para poder tener diferentes habitaciones? perdón si esta es una pregunta molesta.SEGURO: Simplemente,
Esto es lo que necesitas :
cada vez que un usuario se une al servidor, se generarán los detalles del socket, incluido el ID. Esta es la identificación que realmente ayuda a enviar un mensaje a personas en particular.
primero tenemos que almacenar todos los socket.ids en una matriz,
aquí el nombre es el nombre del receptor. Ejemplo:
Entonces, ahora podemos obtener ese socket.id con el nombre del receptor cada vez que enviamos un mensaje:
para esto necesitamos saber el nombre del receptor. Debe emitir el nombre del receptor al servidor.
lo final es:
Espero que esto funcione bien para ti.
¡¡Buena suerte!!
fuente
Puede referirse a las habitaciones socket.io . Cuando apretó el conector, puede unirlo a la sala con nombre, por ejemplo, "usuario. # {Userid}".
Después de eso, puede enviar un mensaje privado a cualquier cliente con un nombre conveniente, por ejemplo:
En la operación anterior enviamos "new_message" al usuario "125".
Gracias.
fuente
En un proyecto de nuestra empresa estamos usando el enfoque de "habitaciones" y su nombre es una combinación de los identificadores de usuario de todos los usuarios en una conversación como un identificador único (nuestra implementación es más como Facebook Messenger), ejemplo:
| id | nombre | 1 | Scott | 2 | Susan
El nombre de la "habitación" será "1-2" (los identificadores se piden Asc.) y al desconectar socket.io limpia automáticamente la habitación
de esta manera, envía mensajes solo a esa sala y solo a usuarios en línea (conectados) (menos paquetes enviados a través del servidor).
fuente
Permíteme hacerlo más simple con las habitaciones socket.io. solicitar un servidor con un identificador único para unirse a un servidor. aquí estamos usando un correo electrónico como identificador único.
Cliente Socket.io
Cuando el usuario se unió a un servidor, cree una sala para ese usuario
Servidor Socket.io
Ahora estamos listos para unirnos. deje emitir algo desde la
to
sala de servidores , para que el usuario pueda escuchar.Servidor Socket.io
Terminemos el tema escuchando el
message
evento por parte del cliente.La referencia de las salas Socket.io
fuente