Связь между двумя концентраторами signalR Core

Aug 17 2020

У меня есть два приложения signalR Core Typescript (A и B) с их собственным SignalR Core C # Hub (C и D).

Нет, я хочу вызвать что-то из A в B. Мой план состоял в том, чтобы отправить сообщение триггера из A в C, затем C перенаправляет его в D и отправляет в B. То же самое должно быть возможно и в другом направлении.

Хабы независимы друг от друга, поэтому включение одного хаба в состав другого для меня не работает. Единственное решение, которое я придумал, - использовать два клиента SignalR Core C # для связи между концентраторами, но это похоже на большие накладные расходы. Или это путь?

Ответы

1 FeiHan Aug 20 2020 at 15:06

У меня есть два приложения signalR Core Typescript (A и B) с их собственным SignalR Core C # Hub (C и D).

Нет, я хочу вызвать что-то из A в B.

Вы можете сослаться на следующие возможные подходы для выполнения вышеуказанного требования.

Подход 1: измените свою реализацию и объедините существующие функции в один класс концентратора, после чего вы можете заставить клиентские приложения SignalR Typescript (A и B) подключаться к одному и тому же серверу-концентратору и обмениваться данными друг с другом.

Подход 2: установите соединения как с концентратором C, так и с концентратором D в клиентских приложениях SignalR Typescript (A и B) для каждого пользователя-клиента, чтобы пользователь, использующий клиентское приложение A Typescript, также мог общаться с пользователями из клиентского приложения B.

Подход 3: как вы упомянули, установите пакет Microsoft.AspNetCore.SignalR.Client и реализуйте клиентскую логику SignalR .NET в проекте сервера-концентратора (A и B), что заставит их действовать как сервер, так и клиент SignalR .NET.

Подход 4: как упоминалось в @ Kiril1512, можно реализовать клиентскую логику SignalR .NET в отдельном проекте, который может быть заданием на основе очередей (или на основе служебной шины и т. Д.). Если пользователь из клиентского приложения SignalR Typescript A хочет общаться с пользователями из клиентского приложения B SignalR Typescript, подключающегося к Hub D, он может отправить конкретное сообщение в Hub C, чтобы добавить новое сообщение в очередь, тогда оно запустит это задание для вызова метода Hub Сервер-концентратор D для отправки сообщений определенным пользователям из клиентского приложения B SignalR Typescript, как показано ниже.

2 Kiril1512 Aug 18 2020 at 05:41

Прежде всего, это вопрос мнения, поэтому, возможно, он будет закрыт.

Но я считаю, что лучший подход - это использовать что-то вроде Service Busи реализовывать коммуникацию на основе событий. Итак, что-то происходит в A, и вы вызываете метод концентратора в C, затем отправляете событие в D, и оно запускается через signalRA. Использование шины событий добавит возможность добавить, например, другой концентратор (E), который может получать эти события и выполнять что-то другое.