tutorial socket rooms react node example javascript node.js socket.io chat

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:

  1. Socket.io habitaciones
  2. Socket.IO suscribirse a múltiples canales
  3. Socket.io habitaciones diferencia entre broadcast.to y sockets.in