[英]get room of a socket in socket.io
如何检索套接字所属的房间? 我正在使用1.4版本的socket.io
我尝试使用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);
});
服务器端,您可以获取套接字所在的房间的列表:
socket.rooms
在客户端,套接字不知道它所在的房间。房间的整个概念是服务器端的概念,所有数据结构都保存在那里。 如果客户想知道它所在的房间,要么要么跟踪它要求成为哪个房间的成员,要么就必须询问服务器它所在的房间。
服务器端socket.rooms
结构有一个怪异之处。 它显然不是实时更新的。 如果执行socket.join("someRoom")
然后立即查看socket.rooms
,则不会看到列出的someRoom
名称。 但是,如果您查看process.nextTick()
或setTimeout()
,则会在socket.rooms
看到它。 我没有深入研究socket.io源代码来弄清楚为什么会这样,但是显然有些东西只是异步更新的。
Object.keys(socket.rooms).forEach(function(room, idx) {
if(idx!=0){
console.log(idx,"-->",room)
}
});
通过上面的代码,您可以确定套接字已加入的所有房间。 您可以跳过索引为0的第一个房间,因为这是套接字在连接时将连接的默认房间。
在SocketIO 1.7上进行了测试,效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.