簡體   English   中英

檢查Socket.IO中特定房間中存儲的客戶端數據

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

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