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

时间:2020-08-17 13:23:57

标签: c# signalr asp.net-core-signalr

我有两个SignalR Core Typescript应用程序(A&B)和它们自己的SignalR Core C#集线器(C&D)。

不,我想从B中的A触发某些事情。我的计划是将触发消息从A发送到C,然后C将其重定向到D并将其发送到B。在其他方向也应该如此

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

2 个答案:

答案 0 :(得分:2)

首先,这是一个意见问题,因此可能会关闭。

但是我相信更好的方法是使用Service Bus之类的东西并实现基于事件的通信。因此,在A处发生了某些事情,您在C处调用了集线器方法,然后将事件发送到D,它将通过signalR触发A。使用事件总线将添加该选项以添加例如另一个集线器(E)接收这些事件并做其他事情。

答案 1 :(得分:1)

我有两个SignalR Core Typescript应用程序(A&B)和它们自己的SignalR Core C#集线器(C&D)。

不,我想从B中的A触发某些事情。

您可以参考以下可能的方法来达到上述要求。

方法1: 修改实现并将现有功能合并到单个Hub类中,然后可以使SignalR Typescript客户端应用程序(A和B)连接到相同的Hub服务器并互相交流。

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

如您所述

方法3: ,请安装Microsoft.AspNetCore.SignalR.Client程序包,并在集线器服务器项目(A和B)上实现SignalR .NET客户端逻辑,这将使它们既充当服务器又充当SignalR .NET客户端。

方法4: 如@ Kiril1512所述,可以在单独的项目中实现SignalR .NET客户端逻辑,该项目可能基于队列(或基于Servicebus等)工作。如果来自SignalR Typescript客户端应用程序A的用户想要与连接到集线器D的SignalR Typescript客户端应用程序B的用户进行通信,则他可以向集线器C发送特定消息以添加新的队列消息,然后它将触发该作业以调用集线器方法集线器服务器D可以从SignalR Typescript客户端应用程序B向特定用户推送消息,如下所示。

enter image description here

相关问题