【问题标题】:socket.io leave current room and join after button is clickedsocket.io 离开当前房间并在单击按钮后加入
【发布时间】:2019-04-11 07:30:28
【问题描述】:

我的问题是关于套接字房间以及离开和加入房间。我的问题是:我正在创建聊天室,并且我希望每当用户(套接字)单击“下一个人”按钮(在我的情况下为链接)我希望套接字断开连接(离开)其当前房间并加入另一个套接字正在等待第二个套接字的另一个房间。就像在 Omegle

标题

所以我尝试了这段代码

客户端:

 N.addEventListener('click', function(e){
                 socket.emit('next')

});

socket.on('next',function(){
socket.disconnect()
document.GetElementById('divd').style.display = "inline";
socket.connect()
});

服务器端:

       socket.on('next', function(){
        socket.leave(socket.current_room)
        chnm.in(socket.current_room).emit('next');
        socket.join(room)
        });

但是每当我单击“下一步”时,它只显示两个套接字断开 div,就像在断开事件中一样,但不会让触发该事件的套接字加入其他房间 我的房间就是这样的

   var room = "room" + numb;
   socket.current_room = room;

但我想要的是在房间(插座断开连接的地方)显示插座断开连接和触发该事件的插座连接到其他房间。 (例如:在房间 1 中,套接字触发了“下一个”链接,他/她从房间 1 断开连接并加入房间 2,并且在房间 1 中出现断开连接 div,我认为如果我使用 socket.disconnect() 无论如何它都会出现,因为我已经创建了断开事件。感谢大家的帮助

【问题讨论】:

  • 您离开一个房间并加入另一个房间的通常方式是向您的服务器发送一条消息,要求它代表您执行socket.leave(oldRoom)socket.join(newRoom)。无需为了更换房间而断开连接并重新连接。
  • 你能给我举个例子吗,我有点困惑,因为我认为我正在做你所说的
  • 请不要破坏您的帖子。如果您认为您的问题没有用或不再有用,则应将其删除,而不是编辑掉实际上使其成为问题的所有数据。通过在 Stack Exchange 网络上发布,您已授予 SE 分发该内容的不可撤销的权利(根据 CC BY-SA 3.0 许可)。根据 SE 政策,任何破坏行为都将被撤销。

标签: node.js sockets express socket.io chatroom


【解决方案1】:

仍然没有显示足够多的代码或描述您想要实现的整体设计,但这是我从您目前所展示的内容中可以看到的。

这是你的事件顺序:

  1. 用户点击按钮
  2. 客户端代码执行socket.emit('next')
  3. 服务器收到next消息
  4. 服务器调用socket.leave(socket.current_room)离开当前房间
  5. 服务器向仍在该房间内的每个人发送.emit('next')
  6. 服务器调用socket.join(room)(我不知道room变量从何而来)
  7. 客户端收到next 消息,这会导致他们发送到socket.disconnect() and thensocket.connect()`(不知道为什么会这样)。

这一系列事件让我觉得奇怪的是:

  1. socket.disconnect() 后跟 socket.connect() 完全没有必要,而且可能会导致问题。首先,这些事件是异步的。如果您真的想先做一个,然后再做另一个,则需要等待断开连接完成,然后再尝试重新连接。但是,大多数情况下,应该没有理由断开然后重新连接。只需更新您已有的连接状态即可。

  2. 我不明白为什么当你将某人分配到一个新房间时,你会断开那个房间里的其他人。

  3. 请不要使用相同的消息名称next 来表示客户端收到它时的一件事和服务器收到它时完全不同的东西。这本身不是编程错误,但它确实使您的代码难以理解。给每个人自己的描述性名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2018-05-24
    • 2013-04-01
    • 2017-12-03
    相关资源
    最近更新 更多