【问题标题】:socket.io private chat:only single one-one chat at a timesocket.io 私聊:一次只能单聊
【发布时间】:2018-06-19 10:53:37
【问题描述】:

这是我使用socket.io rooms与两个用户实现一对一聊天的方法

USERS TABLE
------------
id name
1  bar
2  foo
3  clay

假设用户bar想和foo聊天

socket.join(1);
socket.join(2);

在发送消息时,使用相反的用户 ID 作为接收者 ID,以便我可以轻松发送消息

socket.on('chat', function(data){
//data object contains other user id as receiver id
  io.sockets.in(data.receiverId).emit('chat',{
                message:data.message,
                created_at:new Date()
            });
});

这很好用,但我一次需要一个条件,用户只能与用户聊天一次。

如果claybar 发送消息,则bar 可以读取该消息,那么我该如何避免这个问题

【问题讨论】:

  • 您不能在聊天室私下发送消息。这里 data.receiverId 充当房间 ID。它不是任何用户 ID。知道吗??
  • 那么我该如何解决我的问题
  • stackoverflow.com/a/65787883/3904109 :完整的工作解决方案

标签: javascript node.js socket.io


【解决方案1】:

无法向房间中的特定人员发送消息。当你在房间里发出任何事件时,它是为房间里连接的每个人发出的。
这里,我给你一个加入房间的例子,以及如何在那个房间里发出事件。

// Server Side
// connection is inbuilt event of socket
io.on('connection', (socket)=>{
    // Every time it generates new id when user is connected to socket. 
    console.log(socket.id, "is connected");

    socket.join("RoomName");

    // Here, message is an event name and you can pass your data in second parameter
    io.in("RoomName").emit("message", {"data": "Hello All!"});
}

【讨论】:

    【解决方案2】:

    尝试使用to到目标socket客户端id

    // sending to individual socketid (private message)
    io.to(`${socketId}`).emit('hey', 'I just met you');
    

    参考:https://socket.io/docs/emit-cheatsheet/

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 2013-02-06
      • 2018-12-30
      • 2016-05-21
      • 2011-11-18
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      相关资源
      最近更新 更多