We've got two competing designs having read https://learn.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-in-signalr.
In short what we have is multiple applications across a network of multiple servers broadcasting events/messages to multiple browsers over multiple machines via SignalR. Importantly browsers/clients never connect to an application directly. All clients connect to a server who's sole responsibility is to receive the messages from the server applications and proxy them down to the connected clients - these are called the message-to-client-proxy servers.
The two approaches are:
All servers drop messages on the SignalR Hub and the SignalR scale-out backpane distributes those messages to all the message-to-client-proxy servers which push them down to the browsers.
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)
All servers connect to the message-to-client-proxy servers using a singalR client, pushes the messages via the signalR client directly to A single message-to-client-proxy server which thens pushes that back up to the SignalR scale-out backpane message-to-client-proxy server, which then all them down to the browsers.
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)
The reason we're struggling with this is all example assume the applications / server raising the messages also allow clients to connect to them... which is definately not our case.