2017-10-04 91 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字符串来更新存储的客户端信息。