如何检索套接字所属的房间? 我使用socket.io版本1.4
我尝试使用this.socket.adapter.rooms
,但我在Chrome控制台中收到了此错误:Cannot read property 'rooms' of undefined
在我的客户端代码中,我有这个方法:
send(msg) {
if(msg != ''){
var clientInfo = [];
clientInfo.push(msg);
clientInfo.push(socket.id);
clientInfo.push(this.socket.adapter.rooms);
socket.emit('message', clientInfo);
}
}
在我的服务器端:
socket.on('message', function(clientInfo){
var clientmessage = clientInfo[0];
var clientid = clientInfo[1];
var clientroom = clientInfo[2];
io.to(clientroom).emit('messageSent', clientmessage);
});
答案 0 :(得分:3)
服务器端,您可以获得套接字所在的房间列表:
socket.rooms
客户端,套接字不知道它所在的房间。房间的整个概念是服务器端概念,所有数据结构都在那里维护。如果客户想要知道它所在的房间,它要么必须跟踪它要求成为其成员的房间,要么必须询问服务器它所在的房间。
服务器端socket.rooms
结构有一个奇怪之处。它显然没有实时更新。如果您执行socket.join("someRoom")
,然后立即查看socket.rooms
,则不会看到列出的someRoom
名称。但是,如果您查看process.nextTick()
或setTimeout()
,您会在socket.rooms
中看到它。我还没有深入研究socket.io源代码来弄清楚为什么会这样,但显然只是异步更新。
答案 1 :(得分:1)
Object.keys(socket.rooms).forEach(function(room, idx) {
if(idx!=0){
console.log(idx,"-->",room)
}
});
通过上面的代码,您可以识别套接字已连接的所有房间。 您可以跳过索引0中的第一个房间,因为它是套接字在连接时将连接的默认房间。
使用SocketIO 1.7进行测试并运行良好。