socket.io 发射后留出空间

socket.io leave room after emitting to it

我想知道发送到房间的过程何时完成,以便立即离开房间。 发出后立即离开房间可以吗? 我尝试在发送到房间时使用回调,但出现服务器错误,所以我想这是不可能的。 因为我认为这是一个异步过程,所以在发出后立即离开房间可能不安全(大规模)。 想法?

//join all friends to a room
Socket.join(SOME_ROOM);
//send data to this room
io.to(SOME_ROOM).emit('SOME_EVENT', SOME_DATA); //cb function fails if I add one
//leave room
Socket.leave(SOME_ROOM); //is it safe?

打电话后立即离开房间是安全的.emit()。该房间仅用于确定您打算发送到哪些套接字,并且在 io.to() 调用中同步完成,以便在 .emit() 调用 returns 时全部确定。

即使将数据实际发送到那些 sockets id 是异步完成的(确实如此),socket 是否仍在房间内也不再重要。该房间最初仅用于 select 发送到哪些套接字,实际发送过程本身并未使用。

请记住,虽然房间听起来像是一个无所不能的概念,但它真正隐藏的只是一个插座列表。

所以,你应该能够做到这一点:

//join all friends to a room
Socket.join(SOME_ROOM);

//send data to this room
io.to(SOME_ROOM).emit('SOME_EVENT', SOME_DATA);

//leave room
Socket.leave(SOME_ROOM);