如何正确退订一个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 } 

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

作为一个方面说明 – 如果我连接客户端安娜和客户端鲍勃 – 都接收消息,但如果我重新连接客户端鲍勃 – 鲍勃不能发送消息给安娜。

有没有一个完整的socket io API文档(因为我找不到socket.leave(room)的例子)?

编辑:明白了! Socket IO使用斜杠节省了房间句柄,所以你必须使用socket.leave('/'+hash)

隐式地创build并隐式删除socket.io中的房间。 基本上,他们是空的时候自动删除。

是的,一个前面的/被添加到房间名称内部,但是你不需要添加这个从房间中删除一个套接字。

尝试触发console.log(io.sockets.manager.rooms)创build一个房间,看看发生了什么。

从0.8.7我试了出来,似乎你不必再添加/(斜线)了

 socket.leave(hash) 

工作得很好。

SocketIO 1.0有Socket.prototype.leave(roomName)Socket.prototype.leaveAll()

而且您不必手动删除房间:

断开连接后,sockets将自动退出所有通道,不需要专门拆卸。 [从这里]

正切的sorting,但要回答关于一个完整的socket.io文档的问题的一部分:但是,不是,如果你检查在socket.io的主页上的源,你可以find一些稀疏的文档(查看源代码和CTRL + F表示“房间”)。 我已经做过几次了。 没有什么关于离开房间,但有一些一般的解释。

视图-出处:http://socket.io