2017-10-04 43 views
0

我有一個網站今天使用SignalR,它工作正常。現在我想實施Redis底板,以便可以通過多臺服務器擴展應用程序。SignalR與Redis背板擴展

問題是,我在靜態ConcurrentDictionary中保留有關客戶端的附加信息,如名稱和客戶端connectionId。當我向多個服務器擴展時,這當然不起作用,而且我在創建我自己的「RedisDictionary」之前有任何最佳實踐可供分享?

謝謝

+0

SignalR在Redis中存儲的唯一信息是一個消息ID,然後它使用通道來獲得有關新消息的通知 - 因此沒有將連接ID​​存儲在Redis中。 – Pawel

+0

我知道,這就是爲什麼我要在_ConcurrentDictionary_中存儲其他數據的原因。問題是,是否有將字典或散列表移動到Redis的最佳做法,因爲它需要跨Web服務器共享? – wmmhihaa

+0

您可以將它們存儲在Redis中,或者您可以使用Redis頻道向其他服務器進行廣播。在這兩種情況下都有權衡(線程安全性與查看連接信息)。很難說哪一個更好 - 它可能取決於什麼是重要的 - 延遲與一致性等,這是應用程序特定的。 – Pawel

回答

1

您可以創建一個Redis的背板可以發佈和訂閱您的個人客戶信息。

將客戶端信息存儲爲json字符串,並使用客戶端名稱作爲您的通道名稱。然後,您可以將您的所有服務器訂閱到客戶端。每當對客戶端進行更改時,其更新的信息都將發佈,並且您可以通過反序列化json字符串來更新存儲的客戶端信息。