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

时间:2018-11-07 19:48:00

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

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

标题

所以我尝试了这段代码

客户端:

 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()也会出现,因为我已经创建了断开事件。谢谢大家的帮助<3

1 个答案:

答案 0 :(得分: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 then socket.connect()`(不知道为什么这样做)。

在我看来,有关这一系列事件的事情很奇怪:

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

  2. 我不理解为什么当您将某人分配到新房间时,然后断开该房间中的其他所有人。

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