我的问题是关于套接字房间以及离开和加入房间的问题。我的问题是:我正在创建聊天室,并且我希望每当用户(套接字)单击“下一个人”按钮(在我的情况下为链接)时,我都希望套接字断开连接(离开)其当前房间,并加入另一个正在等待另一个套接字的套接字。就像聊天
所以我尝试了这段代码
客户端:
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
答案 0 :(得分:1)
仍然没有显示出足够的代码,或者您试图达到的总体设计描述都不够,但这是到目前为止我所看到的。
这是您的事件顺序:
socket.emit('next')
next
消息socket.leave(socket.current_room)
离开当前房间.emit('next')
socket.join(room)
(我不知道room
变量来自何处)next
消息,这导致他们进入socket.disconnect() and then
socket.connect()`(不知道为什么这样做)。在我看来,有关这一系列事件的事情很奇怪:
socket.disconnect()
后跟socket.connect()
是完全不必要的,可能会引起问题。首先,这些事件是异步的。如果您真的想先做一个,然后再做另一个,则需要等待断开连接完成后再尝试进行重新连接。但是,大多数情况下,没有理由先断开然后再重新连接。只需更新您已有的连接状态即可。
我不理解为什么当您将某人分配到新房间时,然后断开该房间中的其他所有人。
请不要使用相同的消息名称next
来表示客户端接收到的一件事和服务器接收到的完全不同的消息。这本身不是编程错误,但是确实使您的代码难以理解。给每个人起自己的描述性名称。