如何正确退订socket.io房间并将其销毁?

Kri*_*aps 4 javascript websocket node.js socket.io

每个套接字都有一个内部循环:

if (!chat.room.list[hash]) { // room has expired
    socket.leave(hash);
    delete chat.user.list[socket.store.data.id].rooms[hash];
    delete socket.store.data.inRooms[hash]; // delete room hash from user store
}
Run Code Online (Sandbox Code Playgroud)

socket.leave(hash)什么都不做-套接字仍然接收发送到hash房间的消息。

附带说明-如果我与客户端Anna和客户端Bob相连-都接收消息,但是如果我与客户端Bob重新连接-Bob无法将消息发送给Anna。

在某处有完整的套接字io API文档(因为我找不到socket.leave(room)示例)?

编辑:知道了!套接字IO使用斜杠节省了房间句柄,因此您必须使用socket.leave('/'+hash)

gre*_*ala 5

socket.io中的房间是隐式创建和隐式删除的。基本上,当它们为空时,它们会被自动删除。

是的,前面/被添加到房间内部的名字,但你并不需要添加这去除房间的插座。

console.log(io.sockets.manager.rooms)每当创建房间时尝试触发,以查看内部发生的情况。


mik*_*eil -1

有点切线,但要回答关于完整的 socket.io 文档的问题部分:不完全是,但是,如果您在socket.io 的主页上查看源代码,您可以找到一些稀疏的文档(查看源代码并按 CTRL +F 表示“房间”)。我已经不得不这样做好几次了。那里没有关于离开房间的内容,但有一些一般性的解释。

查看源码:http://socket.io