我可以避免在负载均衡器后面使用 SignalR 背板吗?

Can I avoid of using a SignalR backplane behind a load balancer?

我使用 SignalR 来向浏览器公开 RabbitMQ 消息。这显然适用于一个应用程序实例。问题是它是否也可以在没有背板的情况下使用多个实例。我知道 SignalR 客户端可以从 pod A 断开连接并连接回 pod B,但是 这里的问题到底是什么? 我可以在重新连接期间丢失一些消息。这是唯一的问题吗?重新连接到 pod B 是否被视为常规的新连接,以便客户端再次订阅,因为它在没有重新连接的情况下正常订阅?或者系统没有初始订阅时的输入参数,因此无法在没有提示的情况下重新订阅?

只要您所有的 SignalR 服务器都从 RabbitMQ 获取相同的数据,或者只获取连接到它们的客户端的数据,您就不需要背板。

如果您有以下情况之一,您将需要背板:

  • 客户端可以相互通信。
  • 一个 SignalR 服务器连接到 RabbitMQ,但客户端可以连接到多个 SignalR 服务器。
  • SignalR 服务器连接到不同的队列或从同一队列获取不同的数据。

我有一个类似的设置,使用的是数据库而不是 RabbitMQ,并且需要一个背板,以便只有一个 SignalR 服务器访问数据库(并将数据发送到所有客户端)或在服务器之间共享数据库负载(并将数据发送给所有客户端)。这样,获取数据的服务器可以将其发送到连接到不同服务器的客户端。

我正在为 ASP.NET 使用 SignalR,服务器不知道谁订阅了其他服务器。所有消息都通过背板发送,每个服务器确定它们是否适用于其连接的客户端。例如,这适用于广播,或者如果同一用户有多个客户端,以确保他们都获得相同的数据,而不管服务器如何。