[英]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.