我为每个套接字都有一个内部循环:
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
房间的消息。
作为旁注 - 如果我与客户端Anna和客户端Bob连接 - 都接收消息,但如果我重新连接客户端Bob - Bob无法向Anna发送消息。
是否存在完整的套接字io API文档(因为我找不到socket.leave(room)示例)?
编辑:
得到它了!套接字IO使用斜杠保存房间句柄,因此您必须使用socket.leave('/'+hash)
答案 0 :(得分:4)
socket.io中的房间是隐式创建并隐式删除的。基本上它们在空的时候会被自动删除。
是的,前面的/
会在内部添加到房间名称中,但您不需要添加此项以从房间中移除套接字。
每当创建一个房间时,尝试触发console.log(io.sockets.manager.rooms)
以查看内部发生的事情。
答案 1 :(得分:3)
从0.8.7开始,我尝试了它,似乎你不必再添加/(斜杠)了
socket.leave(hash)
工作得很好。
答案 2 :(得分:1)
SocketIO 1.0有Socket.prototype.leave(roomName)
和Socket.prototype.leaveAll()
。
而且您不必手动删除房间:
断开连接时,插座会自动离开所有通道,并且不需要特别拆卸。 [From here]
答案 3 :(得分:0)
对切线进行排序,但要回答关于完整socket.io文档的问题部分:不过,如果您查看socket.io's home page上的源代码,可以找到一些稀疏文档(查看“房间”的来源和CTRL + F)。我已经好几次了。在那里留下房间没什么,但有一些一般的解释。
视图-出处:http://socket.io