我正在嘗試改編一段使用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