【问题标题】:How to implement SignalR scale-out without using existing backplane options如何在不使用现有背板选项的情况下实现 SignalR 横向扩展
【发布时间】:2016-12-27 14:13:52
【问题描述】:

我正在使用在负载均衡器后面的多个服务器中托管的 SignalR。我将连接 ID 和用户 ID 存储在 sql server 的自定义数据库表中。每次,我都需要向选定的用户发送通知。它在单服务器环境中运行良好。如何在不使用现有背板选项的情况下使用自定义数据库表扩展 SignalR 实现?

【问题讨论】:

  • 在您的场景中 - 您能否将所有需要相互通信的用户保留在一台服务器上?

标签: signalr signalr-backplane


【解决方案1】:

我不确定您当前的实现是什么,因为您的解释似乎有点混乱。如果您在负载均衡器后面有多个服务器,则意味着您应用了一些技术(我想是的!)。但是您说它在单服务器环境中运行良好,但在多服务器环境中却不行。让我们回顾一下多台服务器的强制要求(横向扩展)

  1. 实例之间的通信:这意味着一个实例中的任何消息在所有其他实例上都可用。经典实现是任何类型的队列,SignalR 支持 Redis,您可以使用 SQL Server,但很明显任何 SQL 解决方案的局限性。 Azure 有一个 Redis 缓存作为 PaaS

  2. 内存存储:您通常在单个服务器中使用它,但必须实现共享内存。同样,如果您有可用的服务器,Redis 有一个共享内存解决方案。如果没有像 Redis 这样的解决方案,就不可能实现这一点。 同样,性能较低的解决方案是在 SQL 中实现 MemStorage。

  3. 身份验证:开箱即用的安全实现使用 cookie 来存储加密密钥。但是,一旦您拥有多台服务器,每台服务器都有其唯一的密钥。要解决问题,您必须实现自己的 DataProtector,以防这是您使用的方法。

示例远远超出了这个解释,大部分代码(甚至没有实现实际方法的模板)都需要好几页。我建议您查看扩展应用程序所必需的 3 项。

【讨论】:

  • 能否请您至少添加有关源代码或文章的链接或其他有关自定义背板实现的已回答问题?我敢肯定,至少有几件好事可以真正帮助问题的发起者。
  • 我将添加一些示例(最少),以帮助理解这个概念......我自己实现了一个完整的解决方案,但是代码很多。
  • 您可以提供指向您的存储库的链接,是吗?这对其他人会很有帮助。
  • 很抱歉,我不能让你访问我的存储库,因为我不拥有该项目并且我会遇到法律问题,这就是为什么我必须创建新的东西并分享它。跨度>
  • 那么您的答案没有提供有关如何使用自定义数据库扩展 SignalR 的信息。这就是主题发起人所要求的。
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2017-06-19
  • 2018-03-15
  • 2015-12-14
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多