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
仍然没有显示足够的代码,也没有描述您想要实现的总体设计,但这是我从您目前显示的内容中可以看到的内容。
这是你的事件顺序:
- 用户点击按钮
- 客户端代码
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
,当客户端收到消息时表示一回事,而当服务器收到消息时表示完全不同的消息。这本身不是编程错误,但它确实使您的代码难以理解。给每一个自己的描述性名称。
我的问题是关于插座房间以及离开和加入房间。我的问题是:我正在创建聊天室,我希望每当用户(插座)单击 "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
仍然没有显示足够的代码,也没有描述您想要实现的总体设计,但这是我从您目前显示的内容中可以看到的内容。
这是你的事件顺序:
- 用户点击按钮
- 客户端代码
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
,当客户端收到消息时表示一回事,而当服务器收到消息时表示完全不同的消息。这本身不是编程错误,但它确实使您的代码难以理解。给每一个自己的描述性名称。