Azure SignalR Service internals (Внутренние компоненты Службы Azure SignalR)

Служба Azure SignalR создана на основе платформы ASP.NET Core SignalR. Она также поддерживает ASP.NET SignalR за счет повторной реализации протокола ASP.NET SignalR на базе платформы ASP.NET Core.

Вы можете легко перенести локальный ASP.NET Core SignalR или приложение SignalR ASP.NET для работы с Служба SignalR, изменив несколько строк кода.

Схема описывает типичную архитектуру при использовании Служба SignalR с сервером приложений.

Кроме того, рассматриваются отличия от локального приложения ASP.NET Core SignalR.

Architecture

Подключения сервера приложений

Локальный ASP.NET сервер приложений Core SignalR прослушивает и подключает клиенты напрямую.

При использовании Служба SignalR сервер приложений больше не принимает постоянные клиентские подключения, а:

  1. Вместо этого конечная точка negotiate предоставляется пакетом SDK Службы Azure SignalR для каждого концентратора.
  2. Конечная точка отвечает на запросы на согласование клиентов и перенаправляет клиентов на Служба SignalR.
  3. Клиенты подключаются к Служба SignalR.

Дополнительные сведения см. в разделе о подключениях клиентов.

После запуска сервера приложений:

  • Для ASP.NET Core SignalR: пакет SDK Служба Azure SignalR открывает пять подключений WebSocket для каждого концентратора к Служба SignalR.
  • Для ASP.NET SignalR: пакет SDK Служба Azure SignalR открывает пять подключений WebSocket для каждого концентратора к Служба SignalR, а для каждого приложения — подключение WebSocket.

Начальное число подключений по умолчанию имеет значение 5 и настраивается с помощью InitialHubServerConnectionCount параметра в пакете SDK Служба SignalR. Дополнительные сведения см. в разделе конфигурации.

Хотя сервер приложений подключен к службе SignalR, служба Azure SignalR может отправлять сообщения балансировки нагрузки на сервер. Затем пакет SDK запускает новые подключения сервера к службе для повышения производительности. Сообщения из клиентов и из них мультиплексируются в эти подключения.

Подключения сервера постоянно подключаются к Служба SignalR. Если подключение к серверу отключено из-за проблемы с сетью:

Клиентские подключения

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

  1. Клиент отправляет запрос на согласование на сервер приложений.

  2. Сервер приложений использует пакет SDK Служба Azure SignalR для возврата ответа перенаправления, содержащего URL-адрес Служба SignalR и маркер доступа.

    • Для ASP.NET Core SignalR типичный ответ перенаправления выглядит следующим образом:
      {
          "url":"https://test.service.signalr.net/client/?hub=chat&...",
          "accessToken":"<a typical JWT token>"
      }
      
    • Для ASP.NET SignalR типичный ответ перенаправления выглядит следующим образом:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT token>"
      }
      
  3. После получения ответа перенаправления клиент использует URL-адрес и маркер доступа для подключения к Служба SignalR.

Дополнительные сведения о ASP.NET Core SignalR см. в разделе "Протоколы транспорта".

Передача данных между клиентом и сервером

Когда клиент подключен к Служба SignalR, среда выполнения службы находит подключение к серверу для обслуживания этого клиента.

  • Этот шаг выполняется только один раз, и это сопоставление между клиентом и серверным подключением.
  • Указанное сопоставление поддерживается в Службе SignalR, пока клиент или сервер не отключается.

На этом этапе сервер приложений получает события со сведениями от нового клиента. Логическое подключение к клиенту создается на сервере приложений. Канал данных от клиента к серверу приложения устанавливается с помощью Службы SignalR.

Служба SignalR передает данные от клиента к серверу связывания приложений. Данные с сервера приложений отправляются на сопоставленные клиенты.

Служба SignalR не сохраняет или не сохраняет данные клиента, все полученные данные клиента передаются на целевой сервер или клиенты в режиме реального времени.

Служба Azure SignalR выступает в качестве логического транспортного слоя между сервером приложений и клиентами. Все постоянные подключения выгружаются в Службу SignalR. В результате сервер приложений должен обрабатывать бизнес-логику в классе концентратора, не беспокоясь о клиентских подключениях.

Следующие шаги

Дополнительные сведения о пакетах SDK Для Azure SignalR см. в следующем разделе: