[英]Check stored client data in particular room in Socket.IO
有什么方法可以檢查存儲在特定房間的套接字中的客戶端數據?
假設有“ room1”和“ room2”。 然后,我要檢查“ room2”中是否存在名稱為“ Guest”的套接字。
我該怎么做?
可能有一種方法可以使用Socket.IO內部組件執行此操作,但是我建議您使用數據庫(Redis,Mongo)存儲有關已連接客戶端的信息。
客戶端每次登錄時,您都可以檢查其cookie(會話),從而對其進行身份驗證。 客戶端通過身份驗證和連接后,將其存儲在數據庫中(例如,Redis),並在斷開連接時將其從數據庫中刪除。
Socket.IO不會為您提供該方法,但可以輕松實現。 我之前為此創建了一個小補丁:
https://github.com/3rd-Eden/Socket.IO-node/blob/features/room/lib/socket.js#L60-80
允許您通過致電獲取房間列表
socket.rooms // returns array
因此,這需要一些socket.io內部黑客,但您可以輕松地將該方法添加到套接字,因為在您require('scocket.io')
時,socket.io會為您公開Socket原型。
因此,您可能會這樣做:
require('socket.io').Socket.__defineGetter__('rooms', .. etc ..)
希望這可以幫助 :)
這將為您提供所有房間(在""
)和各個房間中的插座的哈希值:
util.inspect(socketListener.sockets.manager.rooms)
輸出如下:
{"":["LAzOCu5lRdOlbOv7YH8S","597eJrAUmc56EyEKYH8T","uVy_AK8WVJ8oGzE9YH8U","LzZGITUmT9Uf9G-1YH8V","kKgexBImhkwi-FxIYH8W","8NfZC_Lbqv6TctUaYH8X","viSdBTXOVIPR2u8OYH8Y"], "/xyz":["597eJrAUmc56EyEKYH8T","uVy_AK8WVJ8oGzE9YH8U","kKgexBImhkwi-FxIYH8W","8NfZC_Lbqv6TctUaYH8X"], "/abc":["viSdBTXOVIPR2u8OYH8Y"]}
請注意,這里有所有已連接插座的列表,以及該房間中帶有插座的房間的列表。
我會建議alessioalex的答案,但這是您的問題的直接答案:
在服務器的js中,為來賓名稱創建一個空對象(例如var usernames = {};
),並在加入時將用戶名添加到房間的任何位置
usernames.room1 = [];
usernames.room1.push('you');
要么
usernames.room1 = [];
usernames.room1['you'] = 'you';
有時更容易處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.