簡體   English   中英

在socket.io中獲得套接字的空間

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM