Last post Jul 24, 2015 06:51 PM by qingl77
Jul 16, 2015 04:18 PM|qingl77|LINK
I am puzzled about the words "With a backplane enabled" in the following statement:"One solution is to forward messages between servers, using a component called a backplane. With a backplane enabled, each application instance sends messages to the backplane,
and the backplane forwards them to the other application instances."
The reason I ask the above SignalR Backplane enabling problem is motivated by the following:
A WebRole with SignalR Hub server scale out using Service Bus. It periodically sends 10 messages to ten stores (with
store ID from 0 to 9). When it receives a SignalR client (representing a store) connection, it puts connectionId and storeID (as group name) into Hub.Groups. It uses Clients.Group(storeID).send() to send the message to client.
Deploy it to Azure Cloud with 3 instances for load balancing.
When only one store client (SignalR client)
connects to one WebRole instance (using Azure load balancing), the client receives only the message for that store but only from one server instance. Until I have more such clients connecting to other server instances (possibly represent different stores),
each store client starts to receive messages for its store but from all 3 server instances.
Jul 17, 2015 08:24 AM|XIII|LINK
can you please specify in the future where you got the information/documentation from? Likely it comes from the SignalR documentation but now we would have to search.
The backplane is just a way to pass information to servers on which the same SignalR application runs but that you want to keep in sync with one another. Best way to see it is in the following picture:
Jul 17, 2015 11:28 AM|qingl77|LINK
The statement I quote is from "Introduction to Scaleout in SignalR" http://www.asp.net/signalr/overview/performance/scaleout-in-signalr, the same document you refer to.
The problem is that when using Clients.Group(name).send(message), the message won't send from the SignalR server instance to backplane while it has no SignalR client to connect to. However, using broadcasting Clients.All.send(message) will have no such problem.
Jul 17, 2015 12:51 PM|qingl77|LINK
My last comment is not quite correct. My test finds: Even you use broadcast Clients.All.send(message) on all instances of SignalR Server Hub, a SignalR client only receives the message from the Server instance it connected to, not from all Server instances
until those instances are connected by some other SignalR clients.
Jul 24, 2015 06:51 PM|qingl77|LINK
My message sent a week ago is still waiting for answer: In the Microsoft "Introduction to SignalR scale out" article, it states
"With a backplane enabled, each application instance sends messages to the backplane, and the backplane forwards them to the other application instances."
In my test, this "backplane enabled" for a particular SignalR server instance in Azure Cloud (a WebRole) means to have at least one SignalR cleint connecting to that instance. This may be a problem when an instance without any SignalR client connected receives
HTTP request designated to a SignalR client connected by other instance of the same Web Role. Backplane will simply not do routing.
My question is: is there some configuration (maybe in server code) to make all of SignalR server instances "backplane enabled" without relying on those instances connected by SignalR client?