Node 和 Socket.IO - 私人聊天(一对一)

Posted

技术标签:

【中文标题】Node 和 Socket.IO - 私人聊天(一对一)【英文标题】:Node and Socket.IO - Private chat (one to one) 【发布时间】:2018-12-30 10:18:56 【问题描述】:

我正在创建与 Socket.IO 和 Express 的聊天,以便能够一对一聊天(私人聊天)。

主要问题是:我想向 socket.id 发送私人消息,但我希望发送者收到与他发送给接收者相同的消息。

module.exports = (io, socket) => 
  socket.on('send private message', async (msg) => 
    const emitterUser = // mongoose query to get the emitter
    const receiverUser = // mongoose query to get the receiver

    // sending to individual socketid (private message)
    socket.to(receiverUser.socketId).emit('receiver private message', msg); // <- sending to the receiver
    socket.emit('sender private message', msg);// <- sending to the sender
  );
  

我想知道是否有更好的方法来创建私人聊天,或者我是否走错了方向。

【问题讨论】:

两年前我也花了很多时间在这个问题上,我认为我们不能用socket.io做到这一点。我们必须在DB中使用一些其他逻辑。 ***.com/a/65787883/3904109 :看看这里也可能有帮助 【参考方案1】:

可以使用socket-io的函数GROUP 文档:https://socket.io/docs/server-api/

更新

io.on('connection', function(socket)
  console.log('people connect: ' + socket.id);

  // listen create and join room from client
  socket.on('create-room', function(nameroom)
    socket.join(nameroom); // if room not exists create and join to room, if room exists client will join to room
    console.log(nameroom);

    // get all name room
    var array=[];
    for(r in socket.adapter.rooms)
      array.push(r);
    
    console.log(array);
  );

  // listen message from client
  socket.on('client-send-message', function(message)
    io.sockets.in('some-name-room').emit('key-chat', message);
  );
);

【讨论】:

你的意思是“房间”吗?我试图弄清楚如何才能为只有 2 个用户创建一个房间并同时加入他们。你有可能展示一些关于它的东西吗?谢谢! 您可以创建一个房间并将两个人连接到一个房间。或者简单地说,当每个连接建立时,每个套接字本身就是一个房间(主房间是同一连接的 socketId)。对不起,我的英语不好 那么..这是什么想法?如何同时连接房间中的两个人?这是我在文档中没有找到的东西。

以上是关于Node 和 Socket.IO - 私人聊天(一对一)的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 与私人房间聊天

使用 MERN 堆栈和 socket.io 进行私人聊天

在 node.js 中与 socket.io 私聊

Socket IO - 如何让多个管理员用户访问多个 URL 上的多个私人房间

node.js 和 socket.io 与 facebook 好友聊天

无法使用 Laravel echo server、redis 和 socket.io 验证 laravel 私人频道