WebFarm 中的 SignalR
SignalR in WebFarm
我正在尝试使用 AWS Elastic 负载均衡器和 Auto Scaling 在“负载均衡网络场”中部署基于 signalR 的 Web 应用程序。
我的应用程序架构是这样的,所有用户都将消息从 Web 浏览器发送到服务器,然后服务器将这些消息发送到远程计算机上的 Silverlight OOB(或 WPF 应用程序)以显示消息。它在单个 web 服务器环境中工作正常,但是在负载平衡器后面有多个 web 服务器,似乎只有一个服务器将这些消息发送到 Silverlight OOB(或 WPF 应用程序),而连接到场的其他服务器的用户发送的消息丢失了.
显然我的 SL OOB(或 WPF)应用程序只连接到服务器场的一台服务器。虽然理想情况下它应该连接到负载均衡器。
在 SL OOB 中,我使用以下方式连接服务器上的集线器:
Dim url As String = "http://xxxx.com/"
Dim hubConnection As New HubConnection(url)
Dim hubProxy As IHubProxy = hubConnection.CreateHubProxy("myHub")
目前我不考虑网络服务器相互发送消息。
有什么解决方案?
你的理论是正确的。 SL OOB 客户端仅从与 SL OOB 客户端连接到同一服务器的 Web 客户端接收消息。这是已知的 SignalR 体系结构限制。解决它的唯一方法是使用称为 backplane 的东西将所有服务器连接到单个 消息总线
我正在尝试使用 AWS Elastic 负载均衡器和 Auto Scaling 在“负载均衡网络场”中部署基于 signalR 的 Web 应用程序。 我的应用程序架构是这样的,所有用户都将消息从 Web 浏览器发送到服务器,然后服务器将这些消息发送到远程计算机上的 Silverlight OOB(或 WPF 应用程序)以显示消息。它在单个 web 服务器环境中工作正常,但是在负载平衡器后面有多个 web 服务器,似乎只有一个服务器将这些消息发送到 Silverlight OOB(或 WPF 应用程序),而连接到场的其他服务器的用户发送的消息丢失了. 显然我的 SL OOB(或 WPF)应用程序只连接到服务器场的一台服务器。虽然理想情况下它应该连接到负载均衡器。 在 SL OOB 中,我使用以下方式连接服务器上的集线器:
Dim url As String = "http://xxxx.com/"
Dim hubConnection As New HubConnection(url)
Dim hubProxy As IHubProxy = hubConnection.CreateHubProxy("myHub")
目前我不考虑网络服务器相互发送消息。 有什么解决方案?
你的理论是正确的。 SL OOB 客户端仅从与 SL OOB 客户端连接到同一服务器的 Web 客户端接收消息。这是已知的 SignalR 体系结构限制。解决它的唯一方法是使用称为 backplane 的东西将所有服务器连接到单个 消息总线