不同 SignalR 集线器之间的通信?

Communication between different SignalR hubs?

我正在尝试制作一款使用与 Jackbox 游戏类似设置的游戏。它基本上意味着您有一个主机客户端,移动客户端可以通过转到 https://jackbox.tv 并输入房间代码 + 玩家名称来访问。 phone.

无需下载

这是我的设置:

我现在遇到的问题是我不太清楚如何让我的两个集线器相互通信。这两个枢纽是:

我在服务器客户端上有一个 ServerManager 的单例实例,用于保存 GamePlayer 对象以及检索它们(我将添加适当的持久性管理稍后)。

因此,当我尝试在我的主机或 GameHub 中使用这样的 C# 事件时:

...
ServerManager.Instance.OnPlayerJoinedRoom += ServerManager_OnPlayerJoinedRoom;
...

private void ServerManager_OnPlayerJoinedRoom(object sender, (string, string, string) info)
{
    IClientProxy host = Clients.Client(info.Item1);
    host.SendAsync("PlayerJoined", Extensions.ParamArray(info.Item2, info.Item3));
}

我收到一条错误消息,提示 Clients 已处置,因此我无法访问它。我发现这是因为这些是非常轻的物体,在设计上它们在被处理之前的寿命非常短。

那么我还能做些什么来让集线器相互通信,或者这不是 SignalR 的方法?

在 OWIN 启动中注册多个端点:

app.UseEndpoints(ep => { ep.MapHub<HostHub>("/hostHub"); ep.MapHub<GameHub>("/gameHub"); }

然后在您的客户端(即:JavaScript)中连接所需的端点:

var conn = new signalR.HubConnectionBuilder().withUrl('https://localhost:5000/gameHub');

所有集线器共享相同的“/signalr”端点