Communication entre deux concentrateurs signalR Core
J'ai deux applications SignalR Core Typescript (A & B) avec leur propre hub SignalR Core C # (C & D).
Non, je veux déclencher quelque chose de A dans B. Mon plan était d'envoyer le message de déclenchement de A à C, puis C le redirige vers D et l'envoie vers B. La même chose devrait également être possible dans l'autre sens.
Les hubs sont indépendants les uns des autres, donc faire d'un hub une partie de l'autre ne fonctionne pas pour moi. La seule solution que j'ai trouvée consiste à utiliser deux clients SignalR Core C # pour communiquer entre les hubs, mais cela semble être une surcharge importante. Ou est-ce la voie à suivre?
Réponses
J'ai deux applications SignalR Core Typescript (A & B) avec leur propre hub SignalR Core C # (C & D).
Non, je veux déclencher quelque chose de A dans B.
Vous pouvez vous référer aux approches possibles suivantes pour atteindre l'exigence ci-dessus.
Approche 1 : modifiez votre implémentation et fusionnez les fonctionnalités existantes dans une seule classe Hub, puis vous pouvez faire en sorte que les applications client SignalR Typescript (A & B) se connectent au même serveur hub et communiquent entre elles.
Approche 2 : établissez des connexions à la fois au Hub C et au Hub D sur les applications clientes SignalR Typescript (A et B) pour chaque utilisateur client, afin que l'utilisateur utilisant l'application cliente Typescript A puisse également communiquer avec les utilisateurs de l'application cliente Typescript B.
Approche 3 : comme vous l'avez mentionné, installez le package Microsoft.AspNetCore.SignalR.Client et implémentez la logique client SignalR .NET sur le projet de serveur Hub (A & B), ce qui les ferait agir à la fois comme serveur et comme client SignalR .NET.
Approche 4: comme @ Kiril1512 l'a mentionné, peut implémenter la logique client SignalR .NET dans un projet séparé qui pourrait être un travail basé sur la file d'attente (ou basé sur le bus de service, etc.). Si l'utilisateur de l'application cliente SignalR Typescript A souhaite communiquer avec les utilisateurs de l'application cliente SignalR Typescript B se connectant au Hub D, il peut envoyer un message spécifique au Hub C pour ajouter un nouveau message de file d'attente, puis il déclenchera ce travail pour appeler la méthode Hub de Serveur concentrateur D pour envoyer des messages à des utilisateurs spécifiques à partir de l'application client SignalR Typescript B, comme ci-dessous.
Tout d'abord, c'est une question d'opinion donc elle sera peut-être fermée.
Mais je crois que la meilleure approche consiste à utiliser quelque chose comme Service Bus
et à mettre en œuvre une communication basée sur les événements. Donc, quelque chose se passe en A et vous invoquez la méthode du hub en C, puis envoyez un événement à D et il se déclenchera via signalR
le A. L'utilisation du bus d'événements ajoutera la possibilité d'ajouter par exemple un autre hub (E) qui pourrait recevoir ces événements et faire autre chose.