我们有两个竞争设计已阅读https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr。
简而言之,我们拥有的是多个服务器网络上的多个应用程序,通过SignalR在多台机器上向多个浏览器广播事件/消息。 重要的浏览器/客户端永远不会直接连接到应用程序。所有客户端都连接到服务器,该服务器的唯一责任是从服务器应用程序接收消息并将其代理到连接的客户端 - 这些客户端称为消息到客户端代理服务器。
这两种方法是:
所有服务器都在SignalR Hub上丢弃消息,SignalR横向扩展背板将这些消息分发到所有消息到客户端代理服务器,然后将它们推送到浏览器。
APP SERVER === > AZURE SERVICE-BUS
(SignalR BackPane)
|
|
|
|\=== > PROXY SERVER === > WEB CLIENT
| (SignalR Server) (SignalR Client)
|
|
|
|
|\=== > PROXY SERVER === > WEB CLIENT
| (SignalR Server) (SignalR Client)
|
|
|
|
\=== > PROXY SERVER === > WEB CLIENT
(SignalR Server) (SignalR Client)
所有服务器都使用singalR客户端连接到消息到客户端代理服务器,通过signalR客户端将消息直接推送到单个消息到客户端代理服务器,这些服务器将其推送回SignalR规模-out backpane消息到客户端代理服务器,然后将它们全部下载到浏览器。
APP SERVER === > PROXY SERVER === > AZURE SERVICE-BUS
(SignalR Client) (SignalR Server) (SignalR BackPane)
|
|
|
WEB CLIENT < === PROXY SERVER < ==============/|
(SignalR Client) (SignalR Server) |
|
|
WEB CLIENT < === PROXY SERVER < ==============/|
(SignalR Client) (SignalR Server) |
|
|
WEB CLIENT < === PROXY SERVER < ===============/
(SignalR Client) (SignalR Server)
我们正在努力解决这个问题的原因是所有示例都假设应用程序/服务器引发消息也允许客户端连接到它们......这绝对不是我们的情况。