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);