socket.io 离开当前房间并在点击按钮后加入

socket.io leave current room and join after button is clicked

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

标题

所以我尝试了这个代码

client-side:

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

});

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

server-side:

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

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

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

但我想要的是在房间(套接字断开连接的地方)显示套接字断开连接以及触发该事件的套接字在其他房间中加入。 (示例:在房间 1 中,插座触发 "next" link he/she 从房间 1 断开并连接到房间 2,在房间 1 中出现断开连接 div,我认为它会出现无论如何,如果我使用 socket.disconnect() 因为我已经创建了断开连接事件。感谢大家的帮助 <3

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

这是你的事件顺序:

  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,当客户端收到消息时表示一回事,而当服务器收到消息时表示完全不同的消息。这本身不是编程错误,但它确实使您的代码难以理解。给每一个自己的描述性名称。