Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js socket.io单击按钮后离开当前房间并加入_Node.js_Sockets_Express_Socket.io_Chatroom - Fatal编程技术网

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

Node.js socket.io单击按钮后离开当前房间并加入,node.js,sockets,express,socket.io,chatroom,Node.js,Sockets,Express,Socket.io,Chatroom,我的问题是关于socket聊天室以及离开和加入聊天室。我的问题是:我正在创建聊天室,我希望每当用户(socket)单击“下一个人”按钮(在我的案例链接中)时,我希望socket断开(离开)其当前聊天室并加入另一个聊天室,其中另一个套接字正在等待第二个套接字。就像在奥梅格尔 标题 所以我试过这个密码 客户端: N.addEventListener('click', function(e){ socket.emit('next') }); socket.on(

我的问题是关于socket聊天室以及离开和加入聊天室。我的问题是:我正在创建聊天室,我希望每当用户(socket)单击“下一个人”按钮(在我的案例链接中)时,我希望socket断开(离开)其当前聊天室并加入另一个聊天室,其中另一个套接字正在等待第二个套接字。就像在奥梅格尔

标题 所以我试过这个密码

客户端:

 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中出现disconnect div,我想如果我使用插座,它仍然会出现。disconnect()因为我已经创建了disconnect event。感谢大家的帮助仍然没有显示足够的代码,或者您试图实现的总体设计还不够,但以下是我从您目前显示的内容中看到的内容

以下是您的活动顺序:

  • 用户点击按钮
  • 客户端代码不执行socket.emit('next')
  • 服务器收到
    next
    消息
  • 服务器调用
    socket.leave(socket.current\u room)
    以离开当前房间
  • 服务器向仍然在那个房间里的每个人发出一个
    .emit('next')
  • 服务器调用
    socket.join(room)
    (我不知道
    room
    变量来自哪里)
  • 客户机收到
    next
    消息,这会导致他们
    socket.disconnect(),然后
    socket.connect()`(不知道为什么会这样做)
  • 对于这一系列事件,我感到奇怪的是:

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

  • 我不明白为什么当你把一个人分配到一个新房间时,你会断开那个房间里其他人的连接

  • 请不要使用相同的消息名
    next
    来表示客户端接收到的消息时的一件事和服务器接收到的消息时的另一件事。这本身不是一个编程错误,但它确实会使您的代码难以理解。请为每一个消息指定自己的描述性名称


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