SignalR 为另一台机器上的集线器中的用户触发 OnConnectedAsync

SignalR firing OnConnectedAsync for users in a hub on another machine

我们的 Azure SignalR 应用程序有点混合,传出消息进入 ActiveMQ,然后被托管服务中的侦听器接收,该服务接收它们并将它们发送到 NotificationsHub(在同一个 API项目)。例如await _notificationsHub.Clients.All.SendAsync("PerformAction", action, payload);

最近我尝试扩展它,以便使用不同身份验证方案的第二个应用程序(这个是面向外部的,现有的是面向内部的)可以连接并接收一些消息(并发回其他消息)。我做了 POC,一切似乎都很好。

public class NotificationsHub : Microsoft.AspNetCore.SignalR.Hub {
  public override async Task OnConnectedAsync() {
    await Groups.AddToGroupAsync(Context.ConnectionId, "foo");
    await base.OnConnectedAsync();
    await Clients.Caller.SendAsync("SetConnectionId", Context.ConnectionId);
 }
}

今天我在 Visual Studio 新应用程序 API 中进行调试,在 Hub 的 OnConnectedAsync 方法中,我一直在为完全不同的服务器上的用户接收“已连接”事件。

所以我的问题是,SignalR 是否会为连接到同一端点的每个集线器(对于该集线器的每个实例)触发“OnConnected”事件?

即使是这样,这两个 Hub 类 不会被视为独立的并且不共享它们的组(参见 multiple hubs)吗?

编辑

作为参考,该项目的目标是 netcoreapp3.1,并在原始项目中使用 Microsoft.Azure.Signalr 1.8.1,在新项目中使用 1.16.1。

事实证明,SignalR 在连接到 Azure SignalR 服务时使用“Hub”的名称 class,即 'wss://foo.service.signalr.net/server/?hub=notificationshub&cid={guid}'。

所有同名的集线器都被视为同一个集线器。我无法在任何地方的文档中找到它,但它暗示在 ServiceOptionsApplicationName 属性 中,它说“获取 applicationName,它将用作应用于每个中心名称的前缀”。 =12=]