Signalr 通过LoadBalancer运行时,信号器无法向组发送消息

Signalr 通过LoadBalancer运行时,信号器无法向组发送消息,signalr,Signalr,为了向特定用户发送信号器消息,我在连接时为每个用户创建一个组 public override Task OnConnected() { log.DebugFormat("Connected. Connection Id = {0} UserId = '{1}'", Context.ConnectionId, UserHelper.UserId); Groups.Add(Context.ConnectionId, UserHelper.UserId); return bas

为了向特定用户发送信号器消息,我在连接时为每个用户创建一个组

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();
}
现在,当收到一条消息时,我会按以下方式将其发送给一个组:

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

foreach (var recipient in recipients)
{
    hubContext.Clients.Group(recipient).broadcastAlertMessage("Group", msg);
}
我还可以在内部保留连接ID,并向特定的客户端发送消息

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

为什么“组”消息不起作用?

默认情况下,信号服务器只知道并只向直接与其连接的客户端发送消息。这是因为每个信号服务器都使用自己的消息总线管理自己的消息。如果没有特殊配置,Signal无法知道有其他客户端连接到同一全局地址的不同Signal服务器

幸运的是,SignalR具有扩展提供程序,允许您配置所有SignalR服务器,使它们可以通过共享单个消息总线相互通信


这篇“SignalR中的Scaleout简介”应该为您提供让SignalR在负载平衡器后面正常工作所需的信息:

即使我们有一个负载平衡器,在这一点上它后面只有一台服务器(完全排除这个问题)。因此,所有客户端最终都连接到同一个盒子。还有客户端。所有客户端都100%可靠地工作,只有组有问题。我对组也有同样的问题,通过SQL背板向组发送消息
hubContext.Clients.Client(AlertsHub.UserToConnectionIdDict["admin"]).broadcastAlertMessage("trageted client", msg);