Comunicación entre dos concentradores SignalR Core

Aug 17 2020

Tengo dos aplicaciones SignalR Core Typescript (A y B) con su propio SignalR Core C# Hub (C y D).

No, quiero activar algo de A en B. Mi plan era enviar el mensaje de activación de A a C, luego C lo redirige a D y lo envía a B. Lo mismo debería ser posible en la otra dirección también.

Los concentradores son independientes entre sí, por lo que hacer que un concentrador sea parte del otro no me funciona. La única solución que se me ocurrió es usar dos clientes SignalR Core C# para comunicarse entre los concentradores, pero eso parece una gran sobrecarga. ¿O es el camino a seguir?

Respuestas

1 FeiHan Aug 20 2020 at 15:06

Tengo dos aplicaciones SignalR Core Typescript (A y B) con su propio SignalR Core C# Hub (C y D).

No, quiero activar algo de A en B.

Puede consultar los siguientes enfoques posibles para lograr el requisito anterior.

Enfoque 1: modifique su implementación y fusione la funcionalidad existente en una sola clase Hub, luego puede hacer que las aplicaciones cliente de SignalR Typescript (A y B) se conecten al mismo servidor hub y se comuniquen entre sí.

Enfoque 2: establezca conexiones tanto con el concentrador C como con el concentrador D en las aplicaciones cliente SignalR Typescript (A y B) para cada usuario cliente, de modo que el usuario que usa la aplicación cliente Typescript A también pueda comunicarse con los usuarios de la aplicación cliente Typescript B.

Enfoque 3: como mencionó, instale el paquete Microsoft.AspNetCore.SignalR.Client e implemente la lógica del cliente SignalR .NET en el proyecto del servidor Hub (A y B), lo que los haría actuar como servidor y como cliente SignalR .NET.

Enfoque 4: como se mencionó @Kiril1512, puede implementar la lógica del cliente SignalR .NET en un proyecto separado que podría ser un trabajo basado en cola (o bus de servicio, etc.). Si el usuario de la aplicación cliente A de SignalR Typescript desea comunicarse con los usuarios de la aplicación cliente B de SignalR Typescript que se conectan al concentrador D, puede enviar un mensaje específico al concentrador C para agregar un nuevo mensaje de cola, luego activará ese trabajo para invocar el método Hub de Servidor concentrador D para enviar mensajes a usuarios específicos desde la aplicación cliente SignalR Typescript B, como se muestra a continuación.

2 Kiril1512 Aug 18 2020 at 05:41

En primer lugar, esta es una pregunta de opinión, por lo que tal vez se cierre.

Pero creo que el mejor enfoque es usar algo como Service Buse implementar una comunicación basada en eventos. Entonces, algo sucede en A e invoca el método de concentrador en C, luego envía un evento a D y se activará a través signalRde A. El uso del bus de eventos agregará la opción de agregar, por ejemplo, otro concentrador (E) que podría recibir esos eventos y hacer algo más.