javascript - rooms - Creando un chat privado entre una clave usando node.js y socket.io
socket javascript (2)
¿Cómo emito un mensaje a todos los usuarios en un chat privado que comparte un conversation_id usando node.js y socket.io?
var express = require(''express''),
app = express(),
server = require(''http'').createServer(app),
io = require(''socket.io'').listen(server);
conversations = {};
app.get(''/'', function(req, res) {
res.sendfile(''/'');
});
io.sockets.on(''connection'', function (socket) {
socket.on(''send message'', function (data) {
var conversation_id = data.conversation_id;
if (conversation_id in conversations) {
console.log (conversation_id + '' is already in the conversations object'');
// emit the message [data.message] to all connected users in the conversation
} else {
socket.conversation_id = data;
conversations[socket.conversation_id] = socket;
conversations[conversation_id] = data.conversation_id;
console.log (''adding '' + conversation_id + '' to conversations.'');
// emit the message [data.message] to all connected users in the conversation
}
})
});
server.listen(8080);
SURE: 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 detalles de socket incluyendo ID. Este es el ID que realmente ayuda a enviar un mensaje a personas particulares.
Primero necesitamos almacenar todos los socket.ids en la 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 conocer el nombre del servidor. Debes emitir el nombre del receptor al servidor.
Lo último 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
Tienes que crear una sala con conversation_id
y hacer que los usuarios se suscriban a esa sala, para que puedas emitir un mensaje privado a esa sala,
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 Emitir mensaje a una sala:
- Socket.io habitaciones
- Socket.IO suscribirse a múltiples canales
- Socket.io habitaciones diferencia entre broadcast.to y sockets.in