Solución:
Tienes que crear una habitación con conversation_id
y hacer que los usuarios se suscriban a esa sala, para que pueda emitir un mensaje privado a esa sala por,
cliente
var socket = io.connect('http://ip:port');
socket.emit('subscribe', conversation_id);
socket.emit('send message', {
room: conversation_id,
message: "Some message"
});
socket.on('conversation private post', function(data) {
//display data.message
});
Servidor
socket.on('subscribe', function(room) {
console.log('joining room', room);
socket.join(room);
});
socket.on('send message', function(data) {
console.log('sending room post', data.room);
socket.broadcast.to(data.room).emit('conversation private post', {
message: data.message
});
});
Aquí están los documentos y el ejemplo para crear una sala, suscribirse a la sala y enviar un mensaje a una sala:
- Habitaciones Socket.io
- Socket.IO se suscribe a múltiples canales
- Diferencia de habitaciones socket.io entre broadcast.to y sockets.in
SEGURO: Simplemente,
Esto es lo que necesitas :
io.to(socket.id).emit("event", data);
Cada vez que un usuario se une al servidor, se generarán los detalles del socket, incluida la ID. Esta es la ID que realmente ayuda a enviar un mensaje a personas en particular.
primero tenemos que almacenar todos los socket.ids en una matriz,
var people={};
people[name] = socket.id;
aquí el nombre es el nombre del receptor. Ejemplo:
people["ccccc"]=2387423cjhgfwerwer23;
Entonces, ahora podemos obtener ese socket.id con el nombre del receptor cada vez que enviemos un mensaje:
para esto necesitamos saber el nombre del receptor. Necesita emitir el nombre del receptor al servidor.
lo final es:
socket.on('chat message', function(data){
io.to(people[data.reciever]).emit('chat message', data.msg);
});
Espero que esto funcione bien para ti. !! Buena suerte