【问题标题】:SignalR scaleout with Redis backplane带有 Redis 背板的 SignalR 横向扩展
【发布时间】:2018-03-15 20:04:46
【问题描述】:

我今天有一个使用 SignalR 的网站,它运行良好。现在我想实现 Redis 背板,以便我可以在多个服务器上扩展应用程序。

问题是我在静态 ConcurrentDictionary 中保留了有关客户端的其他信息,例如名称和客户端 connectionId。当我扩展到多台服务器时,这当然不起作用,我想知道在我构建自己的 “RedisDictionary” 之前是否有人可以分享一些最佳实践?

谢谢

【问题讨论】:

  • SignalR 在 Redis 中存储的唯一内容是消息 ID,然后它使用通道来获取有关新消息的通知 - 因此 Redis 中没有存储连接 ID。
  • 我知道这一点,这就是我在 ConcurrentDictionary 中存储额外数据的原因。问题是,是否有将字典或哈希表移动到 Redis 的最佳实践,因为它需要跨 Web 服务器共享?
  • 您可以将它们存储在 Redis 中,也可以使用 Redis 频道广播到其他服务器。在这两种情况下都有权衡(线程安全与查找连接信息)。很难说哪个更好 - 它可能取决于什么是重要的 - 延迟与一致性等,这是特定于应用程序的。

标签: asp.net signalr


【解决方案1】:

您可以创建一个 Redis 背板来发布和订阅您的个人客户信息。

将客户端信息存储为 json 字符串,并使用客户端名称作为您的频道名称。然后,您可以将您的所有服务器订阅到客户端。每当对客户端进行更改时,都会发布其更新的信息,您可以通过反序列化 json 字符串来更新存储的客户端信息。

【讨论】:

  • 您能否提供更多关于如何实施的信息。
猜你喜欢
  • 2015-12-14
  • 2023-04-10
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
相关资源
最近更新 更多