Vitalik
Vitalik

Reputation: 2754

SignalR fails to send message to a group when running through LoadBalancer

In order to send SignalR message to a specific user I create a Group for each user upon connection

public override Task OnConnected()
{
    log.DebugFormat("Connected. Connection Id = {0} UserId = '{1}'", Context.ConnectionId, UserHelper.UserId);
    Groups.Add(Context.ConnectionId, UserHelper.UserId);
    return base.OnConnected();
}

Now when a message comes in I send it a group in the following way:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<AlertsHub>();

foreach (var recipient in recipients)
{
    hubContext.Clients.Group(recipient).broadcastAlertMessage("Group", msg);
}

That works fine when deployed to a server, but for some reason not working when i access the server through our company load balancer (Citrix Netscaler SDX 11500) but eventually hitting the same sole box.

There is no issue sending messages to all clients

hubContext.Clients.All.broadcastAlertMessage("All", msg);

Also i can keep the connection IDs internally and send messages to a specific client works

hubContext.Clients.Client(AlertsHub.UserToConnectionIdDict["admin"]).broadcastAlertMessage("trageted client", msg);

Why "Group" message doesn't work?

Upvotes: 2

Views: 2749

Answers (1)

halter73
halter73

Reputation: 15234

By default, a SignalR server is only aware of and will only send messages to clients connected directly to itself. This is because each SignalR server manages its own messages using its own message bus. Without special configuration, SignalR has no way to know there are other clients connected to a different SignalR server at the same global address.

Fortunately SignalR has scaleout providers that allow you to configure all your SignalR servers in such a way that they can communicate with each other by sharing single message bus.

This "Introduction to Scaleout in SignalR" should provide you with the info you need to get SignalR working properly behind a load balancer: http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/scaleout-in-signalr

Upvotes: 2

Related Questions