我正在尝试改编一段使用socket.io 0.9编码的代码,该代码返回特定房间和客房列表中的客户列表(典型聊天室的例子)解决客户端和客房 - 从socket.io 0.9迁移到+ 1.x
用户在房间房间
var usersInRoom = io.sockets.clients(room);
列表
socket.on('rooms', function() {
var tmp = io.sockets.manager.rooms;
socket.emit('rooms', tmp);
});
TMP看起来像这样
{
0: Array[1],
1: /Lobby: Array[1]
}
这样我就可以显示在客户端列表中与浏览器这个JavaScript运行。
socket.on('rooms', function(rooms) {
$('#room-list').empty();
debugger;
for(var room in rooms) {
room = room.substring(1, room.length);
if (room != '') {
$('#room-list').append(divEscapedContentElement(room));
}
}
$('#room-list div').click(function() {
chatApp.processCommand('/join ' + $(this).text());
$('#send-message').focus();
});
});
但是,对于版本> 1.x,我刚刚发现客户端/房间已更改。 经过一些环节,我发现在这里,我可以管理由这样做是为了让房间列表:
socket.on('rooms', function(){
var tmp = socket.rooms;
socket.emit('rooms', tmp);
});
这里的问题是,socket.rooms
回报
{
0: "RandomString",
1: "Lobby",
length: 2
}
而我只需要通过'大堂的房间。我不知道随机字符串从哪里来。
编辑 通过一些调试,我发现,randomstring是socket.id ...这是正常的这种行为?将房间和socket.id一起返回?
更新
我终于得到了一些成果
用户在室内房间
var usersInRoom = getUsersByRoom('/', room);
function getUsersByRoom(nsp, room) {
var users = []
for (var id in io.of(nsp).adapter.rooms[room]) {
users.push(io.of(nsp).adapter.nsp.connected[id]);
};
return users;
};
列表
function getRooms(io){
var allRooms = io.sockets.adapter.rooms;
var allClients = io.engine.clients;
var result = [];
for(var room in allRooms){
// check the value is not a 'client-socket-id' but a room's name
if(!allClients.hasOwnProperty(room)){
result.push(room);
}
}
return result;
}
更好更直接的方法来实现结果?
这些都是我检查链接:
How to get room's clients list in socket.io 1.0
socket.io get rooms which socket is currently in