我们已经阅读了两个竞争设计https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr。
简而言之,我们拥有的是跨多个服务器网络的多个应用程序,通过 SignalR 在多台机器上向多个浏览器广播事件/消息。重要的是,浏览器/客户端永远不会直接连接到应用程序。所有客户端都连接到服务器,该服务器的唯一职责是接收来自服务器应用程序的消息并将它们代理到连接的客户端 - 这些称为消息到客户端代理服务器。
这两种方法是:
所有服务器都将消息放在 SignalR 集线器上,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 横向扩展背板消息到客户端代理服务器,然后将它们全部发送到浏览器。
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)
我们为此苦苦挣扎的原因都是假设应用程序/服务器引发消息也允许客户端连接到它们......这绝对不是我们的情况。