2012-08-08 58 views
2

我想在連接到我的集線器類時將用戶映射到連接標識符,有效地完成此操作的策略是什麼?我想將用戶的個人資料與他的連接ID關聯起來,因此當我查看某個特定信號員組中的用戶時,我可以輕鬆地爲每個用戶的個人資料信息添加內容什麼是將用戶映射到連接ID的最佳方式

回答

4

從技術上講,如果您不擔心維護狀態,可憐的人在內存ConcurrentDictionary<string, ConcurrentBag<string>>,但我會假設你正在嘗試比這更容易擴展/容錯。

JabbR是SignalR框架的旗艦測試平臺聊天應用程序,它將連接的客戶端詳細信息存儲在其DB(恰好是SQL)的表中。它具有單個ChatUser - >到許多ChatClient實例(一對多)的映射。這樣,當一個邏輯用戶登錄時,它就知道該用戶是誰的邏輯,並且還可以確保它能夠將正確的消息引導到用戶當前可能打開的所有連接的客戶端實例。如果您有興趣瞭解更多信息,請致電You can find that specific implementation here

+0

您是否必須考慮db解決方案的併發性?另外,如何處理服務器關閉時的情況?所有映射仍然保存在數據庫中,那麼每次啓動ap時都必須截斷表格? – anthonypliu 2012-08-30 20:43:58

+0

當然,您必須處理您在任何應用程序中必須處理的所有常見併發/可伸縮性問題。至於聯網用戶,是的,當你重新啓動時,你必須弄清楚發生了什麼。 JabbR通過在應用程序啓動過程中清除整個表格來實現這一點,儘管這是簡單的,蠻力的,可能不是您可能擁有的最優雅的解決方案......特別是對於託管的應用程序:https://github.com/davidfowl/ JabbR/blob/master/JabbR/App_Start/Bootstrapper.cs#L146 – 2012-08-30 22:15:02

+0

感謝您的迴應,但那時您會有什麼建議。我如何能夠在一個農場託管的應用程序中管理它。一臺服務器關閉,它將如何知道從哪個用戶刪除表格? – anthonypliu 2012-08-30 22:20:02

相關問題