两个 signalR 核心集线器之间的通信

Communication between two signalR Core Hubs

我有两个 signalR Core Typescript 应用程序(A 和 B)以及它们自己的 SignalR Core C# Hub(C 和 D)。

不,我想在 B 中从 A 触发一些东西。我的计划是将触发消息从 A 发送到 C,然后 C 将其重定向到 D 并将其发送到 B。在另一个方向上应该也可以还有。

集线器彼此独立,因此让一个集线器成为另一个集线器的一部分对我来说不起作用。 我想出的唯一解决方案是使用两个 SignalR Core C# 客户端在集线器之间进行通信,但这似乎是一个很大的开销。或者这是要走的路?

首先,这是一个意见问题,所以可能会被关闭。

但我认为更好的方法是使用 Service Bus 之类的方法并实施基于事件的通信。所以在 A 发生了一些事情,你在 C 调用集线器方法,然后向 D 发送一个事件,它将通过 signalR A 触发。使用事件总线将添加选项以添加例如另一个集线器 (E),它可以接收这些事件并做其他事情。

I have two signalR Core Typescript Apps (A & B) with their own SignalR Core C# Hub (C & D).

No I want to trigger something from A in B.

您可以参考以下可能的方法来实现上述需求。

方法 1: 修改您的实现并将现有功能合并到单个 Hub class,然后您可以制作 SignalR Typescript客户端应用程序 (A & B) 连接到同一中心服务器并相互通信。

方法 2: 为每个客户端在 SignalR Typescript 客户端应用程序(A 和 B)上建立到集线器 C 和集线器 D 的连接用户,以便使用 Typescript 客户端应用程序 A 的用户也可以与来自 Typescript 客户端应用程序 B 的用户通信。

方法 3: 如您所述,安装 Microsoft.AspNetCore.SignalR.Client 包并在 Hub 服务器项目上实现 SignalR .NET 客户端逻辑(A & B),这将使它们同时充当服务器和 SignalR .NET 客户端。

方法 4: 如 @Kiril1512 所述,可以在可能是 queue-based(或 servicebus-based 等)作业。如果来自 SignalR Typescript 客户端应用程序 A 的用户想要与来自连接到集线器 D 的 SignalR Typescript 客户端应用程序 B 的用户进行通信,他可以将特定消息发送到集线器 C 以添加新的队列消息,然后它将触发该作业以调用集线器方法中心服务器 D 从 SignalR Typescript 客户端应用程序 B 向特定用户推送消息,如下所示。