Comunicazione tra due signalR Core Hub
Ho due app SignalR Core Typescript (A e B) con il proprio hub SignalR Core C# (C e D).
No, voglio attivare qualcosa da A in B. Il mio piano era di inviare il messaggio di attivazione da A a C, quindi C lo reindirizza a D e lo invia a B. Lo stesso dovrebbe essere possibile anche nell'altra direzione.
Gli Hub sono indipendenti l'uno dall'altro, quindi rendere un Hub parte dell'altro non funziona per me. L'unica soluzione che mi è venuta in mente è usare due client SignalR Core C# per comunicare tra gli hub, ma sembra un grosso sovraccarico. O è la strada da percorrere?
Risposte
Ho due app SignalR Core Typescript (A e B) con il proprio hub SignalR Core C# (C e D).
No, voglio attivare qualcosa da A in B.
È possibile fare riferimento ai seguenti possibili approcci per raggiungere il requisito di cui sopra.
Approccio 1: modifica l'implementazione e unisci le funzionalità esistenti in una singola classe Hub, quindi puoi fare in modo che le app client Typescript di SignalR (A e B) si connettano allo stesso server hub e comunichino tra loro.
Approccio 2: stabilire connessioni all'hub C e all'hub D nelle app client Typescript SignalR (A e B) per ogni utente client, in modo che l'utente che usa l'app client Typescript A possa anche comunicare con gli utenti dall'app client Typescript B.
Approccio 3: come accennato, installa il pacchetto Microsoft.AspNetCore.SignalR.Client e implementa la logica client SignalR .NET sul progetto del server Hub (A e B), che li farebbe agire sia come server che come client SignalR .NET.
Approccio 4: come menzionato da @ Kiril1512, può implementare la logica client SignalR .NET in un progetto separato che potrebbe essere un lavoro basato su coda (o basato su bus di servizio, ecc.). Se l'utente dell'app client Typescript SignalR A desidera comunicare con gli utenti dell'app client Typescript SignalR B che si connette all'hub D, può inviare un messaggio specifico all'hub C per aggiungere un nuovo messaggio in coda, quindi attiverà tale processo per richiamare il metodo Hub di Server hub D per eseguire il push dei messaggi a utenti specifici dall'app client B di SignalR Typescript, come di seguito.

Prima di tutto, questa è una domanda di opinione, quindi forse sarà chiusa.
Ma credo che l'approccio migliore sia utilizzare qualcosa di simile Service Bus
e implementare la comunicazione basata sugli eventi. Quindi succede qualcosa in A e invochi il metodo hub in C, quindi invii un evento a D e si attiverà tramite signalR
A. L'uso del bus degli eventi aggiungerà l'opzione per aggiungere ad esempio un altro hub (E) che potrebbe ricevere quegli eventi e farlo qualcos'altro.