【问题标题】:Can I avoid of using a SignalR backplane behind a load balancer?我可以避免在负载均衡器后面使用 SignalR 背板吗?
【发布时间】:2022-01-08 11:55:35
【问题描述】:

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

【问题讨论】:

  • 您使用的是 SignalR for ASP.NET 还是 Core?

标签: signalr signalr-backplane


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2021-09-10
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多