【问题标题】:Socket Io users Connected to two rooms gets messages from both rooms in same window连接到两个房间的 Socket Io 用户从同一窗口中的两个房间获取消息
【发布时间】:2016-10-23 04:41:53
【问题描述】:

我正在尝试实现与群组相同的功能,其中用户一次连接到多个房间。

假设两个用户 1 和 2,分别连接到房间 A 和 B。当我执行 socket.broadcast.to(A).emit 时,两个用户都在同一个窗口上收到消息,即使他们都连接到不同的房间

我得到 groupsList 用户是从数据库连接的。我正在使用 groupId

for(var i=0;i<groupsList.length;i++){
        var groupName = groupsList[i].Id.toString();
        socket.join(groupName);
    }

消息表单客户端发送使用

socket.emit('send-Group-Message', {msg:messageBox.val(),"groupId":$("#connectedGroup").val()});

在服务器端

    socket.on('send-Group-Message',function(data){
    socket.broadcast.to(groupIdString).emit('group_message',{msg:message,date:Datesent,senderUsername:socket.nickname,senderDisplayName:displayName})
    socket.emit('myGroup_message',{msg:message,date:Datesent,senderDisplayName:displayName});
});

然后在客户端

socket.on('group_message', function (data) {
    chat.append("<div class=\"row\" ><span class='recivedMessage'><div class=\"alert alert-info textWrap\"><b>"+data.senderDisplayName+": </b>"
                                + data.msg + "<br><span class=\"date\">"+ data.date.toString() +"</span></div></span></div>");
});

我可以从客户端检查哪个组与消息相关联,但我不确定这是否是正确的方法。

我怎样才能干净地分隔房间?

【问题讨论】:

  • 我尽可能地修复了损坏的英语。遗憾的是,如果没有代码示例,就无法为您提供帮助,特别是您如何管理房间以及如何发送消息?
  • 添加代码示例

标签: node.js sockets websocket socket.io


【解决方案1】:

如果一个套接字可以在您的应用程序中的多个房间中,并且您希望接收客户端知道消息来自哪个房间,那么您需要在消息广播中包含消息所属的room

socket.broadcast.to(A).emit("newMsg", {room: A, msg: "some Message Here"});

然后,接收客户端获取消息数据和它对应的房间名称,然后客户端可以在页面上适合该房间的相应小部件中显示该消息。

广播本身并不表明它被广播到的房间。房间实际上只是用于分组套接字的服务器端概念。当它向房间广播时,它实际上只是获取一个套接字列表,遍历列表中的每个套接字发送所需的消息。没有实际发送消息的房间的概念。所以,就像我上面说的,如果你想让接收者知道消息对应的房间,那么你需要显式地和消息一起发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-03
    • 2016-12-14
    • 1970-01-01
    • 2020-03-07
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    相关资源
    最近更新 更多