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 или ASP.NET SignalR для работы со Службой SignalR, изменив несколько строк кода, легко.

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

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

Архитектура

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

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

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

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

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

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

  • Для ASP.NET Core SignalR: пакет SDK Azure SignalR Service открывает пять подключений 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>"
      }
      
    • Для ASP.NET SignalR типичный ответ перенаправления выглядит следующим образом:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT>"
      }
      
  3. После получения ответа перенаправления клиент использует URL-адрес и маркер доступа для подключения к сервису SignalR.

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

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

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

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

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

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

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

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

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

Дополнительные сведения о SDK Azure SignalR см. статью: