Бөлісу құралы:


Использование Служба Azure SignalR

В этой статье показано, как использовать пакет SDK на стороне сервера приложений для подключения к Служба SignalR при использовании SignalR на сервере приложений.

Создание экземпляра службы Azure SignalR

Выполните краткое руководство. Используйте шаблон ARM для развертывания Azure SignalR для создания экземпляра службы SignalR .

Для ASP.NET Core SignalR

Установка пакета SDK

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

dotnet add package Microsoft.Azure.SignalR

Startup В классе используйте пакет SDK Служба SignalR в качестве следующего фрагмента кода.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR()
            .AddAzureSignalR();
}

public void Configure(IApplicationBuilder app)
{
    app.UseEndpoints(routes =>
    {
        routes.MapHub<YourHubClass>("/path_for_your_hub");
    });
}

Настройка строки подключения

Существует два подхода к настройке строка подключения Служба SignalR в приложении.

  • Задайте переменную среды с именем Azure:SignalR:ConnectionString или Azure__SignalR__ConnectionString.

    • В службе приложение Azure поместите его в параметры приложения.
  • Передайте строка подключения в качестве параметраAddAzureSignalR().

    services.AddSignalR()
            .AddAzureSignalR("<replace with your connection string>");
    

    or

    services.AddSignalR()
            .AddAzureSignalR(options => options.ConnectionString = "<replace with your connection string>");
    

Настройка параметров

При использовании пакета SDK для Служба Azure SignalR можно настроить несколько вариантов.

ConnectionString

  • Значение по умолчанию — это Azure:SignalR:ConnectionString connectionString appSetting или в web.config файле.
  • Его можно перенастроить, но убедитесь, что значение не закодировано.

InitialHubServerConnectionCount

  • Значение по умолчанию: 5.
  • Этот параметр определяет начальное количество подключений на концентратор между сервером приложений и Служба Azure SignalR. Обычно держите его достаточно, так как значение по умолчанию достаточно. Во время выполнения пакет SDK может запускать новые подключения к серверу для настройки производительности или балансировки нагрузки. При наличии большого количества клиентов вы можете дать ему большее число для повышения пропускной способности. Например, если у вас есть 100 000 клиентов в общей сложности, число подключений может быть увеличено до 10 или 15.

MaxHubServerConnectionCount

  • Значение по умолчанию: null.
  • Этот параметр определяет максимальное количество подключений, разрешенных для каждого концентратора между сервером приложений и Служба Azure SignalR. Во время выполнения пакет SDK может запускать новые подключения к серверу для настройки производительности или балансировки нагрузки. По умолчанию новое подключение к серверу запускается всякий раз, когда это необходимо. Если настроено максимально допустимое число подключений к серверу, пакет SDK не запускает новые подключения, когда количество подключений сервера достигает предела.

ApplicationName

  • Значение по умолчанию: null.
  • Этот параметр может быть полезен, если вы хотите предоставить общий доступ к одному экземпляру Azure SignalR для разных серверов приложений, содержащих одинаковые имена концентраторов. Если не задано, все подключенные серверы приложений считаются экземплярами одного приложения.

ClaimsProvider

  • Значение по умолчанию: null.
  • Этот параметр управляет утверждениями, которые необходимо связать с подключением клиента. Он используется при создании маркера доступа для клиента в запросе на согласование клиента. По умолчанию все утверждения из HttpContext.User согласованного запроса зарезервированы. К ней Hub.Context.Userможно получить доступ.
  • Как правило, этот параметр следует оставить как есть. Убедитесь, что вы понимаете, что происходит перед настройкой.

AccessTokenLifetime

  • Значение по умолчанию: 1 hour.
  • Этот параметр определяет допустимое время существования маркера доступа, создаваемый пакетом SDK службы для каждого клиента. Маркер доступа возвращается в ответ на запрос на согласование клиента.
  • Когда ServerSentEvent или LongPolling используется в качестве транспорта, подключение клиента будет закрыто из-за сбоя проверки подлинности после истечения срока действия. Это значение можно увеличить, чтобы избежать отключения клиента.

AccessTokenAlgorithm

  • Значение по умолчанию — HS256
  • Этот параметр предоставляет выбор SecurityAlgorithms при создании маркера доступа. Теперь поддерживаются HS256 необязательные значения и HS512. Обратите внимание, что HS512 более безопасный, но созданный маркер сравнительно длиннее, чем используется HS256.

ServerStickyMode

  • Значение по умолчанию: Disabled.
  • Этот параметр задает режим для прилипания сервера. Когда клиент направляется на сервер, с которым он сначала ведет переговоры, мы называем его липким сервером.
  • В распределенных сценариях может быть несколько серверов приложений, подключенных к одному экземпляру Azure SignalR. Как объясняют внутренние подключения клиентов, клиент сначала ведет переговоры с сервером приложений, а затем перенаправляется в Azure SignalR, чтобы установить постоянное подключение. Затем Azure SignalR находит один сервер приложений для обслуживания клиента, как объясняет транспорт данных между клиентом и сервером .
    • Когда Disabledклиент направляется на случайный сервер приложений. Как правило, серверы приложений имеют сбалансированные клиентские подключения с этим режимом. Если ваши сценарии широковещательны или групповые отправки, используйте этот параметр по умолчанию достаточно.
    • Когда PreferredAzure SignalR пытается найти сервер приложений, с которым клиент сначала согласен, так как не требуется никакой другой стоимости или глобальной маршрутизации. Это может быть полезно при отправке сценария в подключение*. Отправка в подключение может иметь более высокую производительность и меньшую задержку, когда отправитель и получатель перенаправляются на тот же сервер приложений.
    • Когда RequiredAzure SignalR всегда пытается найти сервер приложений, с которым клиент сначала согласуется. Этот параметр может быть полезен, если некоторый контекст клиента извлекается из negotiate шага и хранится в памяти, а затем используется внутри Hubs. Однако этот вариант может иметь недостатки производительности, так как для этого требуется Azure SignalR предпринять другие усилия для глобального поиска этого конкретного сервера приложений, а также для глобальной маршрутизации трафика между клиентом и сервером.

GracefulShutdown

GracefulShutdown.Mode
  • Значение по умолчанию — Off
  • Этот параметр указывает поведение после того, как сервер приложений получает SIGINT (CTRL+C).
  • Если задано значение WaitForClientsClose,вместо немедленной остановки сервера, мы удаляем его из Служба Azure SignalR, чтобы предотвратить назначение новых клиентских подключений этому серверу.
  • При установке значения MigrateClients, кроме того, мы пытаемся перенести клиентские подключения на другой допустимый сервер. Миграция будет активирована только после доставки сообщения.
    • OnConnected и OnDisconnected активируются при переносе подключений в систему и выходе.
    • IConnectionMigrationFeature вы можете определить, переносится ли подключение в систему или выходить.
    • Ознакомьтесь с нашими примерами кодов для подробного использования.
GracefulShutdown.Timeout
  • Значение по умолчанию — 30 seconds
  • Этот параметр указывает самое длительное время ожидания закрытия или переноса клиентов.

ServiceScaleTimeout

  • Значение по умолчанию — 5 minutes
  • Этот параметр задает самое длительное время ожидания динамических конечных точек службы масштабирования, которые влияют на сетевые клиенты как минимум. Как правило, динамический масштаб между одним сервером приложений и конечной точкой службы может быть завершен в секундах, учитывая наличие нескольких серверов приложений и нескольких конечных точек службы с сетевым jitter и хотите обеспечить стабильность клиента, это значение можно настроить соответствующим образом.

MaxPollIntervalInSeconds

  • Значение по умолчанию — 5
  • Этот параметр определяет максимальный интервал опроса, разрешенный для LongPolling подключений в Служба Azure SignalR. Если следующий запрос опроса не войдетMaxPollIntervalInSeconds, Служба Azure SignalR очищает подключение клиента.
  • Значение ограничено [1, 300].

TransportTypeDetector

  • Значение по умолчанию: все транспорты включены.
  • Этот параметр определяет функцию для настройки транспорта, которые клиенты могут использовать для отправки HTTP-запросов.
  • Используйте эти параметры вместо HttpConnectionDispatcherOptions.Transports настройки транспорта.

Пример

Вы можете настроить приведенные выше параметры, как в следующем примере кода.

services.AddSignalR()
        .AddAzureSignalR(options =>
            {
                options.InitialHubServerConnectionCount = 10;
                options.AccessTokenLifetime = TimeSpan.FromDays(1);
                options.ClaimsProvider = context => context.User.Claims;

                options.GracefulShutdown.Mode = GracefulShutdownMode.WaitForClientsClose;
                options.GracefulShutdown.Timeout = TimeSpan.FromSeconds(10);
                options.TransportTypeDetector = httpContext => AspNetCore.Http.Connections.HttpTransportType.WebSockets | AspNetCore.Http.Connections.HttpTransportType.LongPolling;
            });

Для устаревшего ASP.NET SignalR

Примечание.

Если вы впервые пытаетесь использовать SignalR, рекомендуется использовать ASP.NET Core SignalR, проще , надежнее и проще использовать.

Установка пакета SDK

Установите пакет SDK Служба SignalR в проект ASP.NET с помощью консоли диспетчер пакетов:

Install-Package Microsoft.Azure.SignalR.AspNet

Startup В классе используйте пакет SDK Служба SignalR в качестве следующего фрагмента кода, замените MapSignalR() MapAzureSignalR({your_applicationName})на . Замените {YourApplicationName} имя приложения уникальным именем, чтобы отличить это приложение от других приложений. Вы можете использовать this.GetType().FullName как значение.

public void Configuration(IAppBuilder app)
{
    app.MapAzureSignalR(this.GetType().FullName);
}

Настройка строки подключения

Задайте строка подключения в web.config файле в connectionStrings разделе:

<configuration>
    <connectionStrings>
        <add name="Azure:SignalR:ConnectionString" connectionString="Endpoint=...;AccessKey=..."/>
    </connectionStrings>
    ...
</configuration>

Настройка параметров

При использовании пакета SDK для Служба Azure SignalR можно настроить несколько вариантов.

ConnectionString

  • Значение по умолчанию — это Azure:SignalR:ConnectionString connectionString appSetting или в web.config файле.
  • Его можно перенастроить, но убедитесь, что значение не закодировано.

InitialHubServerConnectionCount

  • Значение по умолчанию: 5.
  • Этот параметр определяет начальное количество подключений на концентратор между сервером приложений и Служба Azure SignalR. Обычно держите его достаточно, так как значение по умолчанию достаточно. Во время выполнения пакет SDK может запускать новые подключения к серверу для настройки производительности или балансировки нагрузки. При наличии большого количества клиентов вы можете дать ему большее число для повышения пропускной способности. Например, если у вас есть 100 000 клиентов в общей сложности, число подключений может быть увеличено до 10 или 15.

MaxHubServerConnectionCount

  • Значение по умолчанию: null.
  • Этот параметр определяет максимальное количество подключений, разрешенных для каждого концентратора между сервером приложений и Служба Azure SignalR. Во время выполнения пакет SDK может запускать новые подключения к серверу для настройки производительности или балансировки нагрузки. По умолчанию новое подключение к серверу запускается всякий раз, когда это необходимо. Если настроено максимально допустимое число подключений к серверу, пакет SDK не запускает новые подключения, когда количество подключений сервера достигает предела.

ApplicationName

  • Значение по умолчанию: null.
  • Этот параметр может быть полезен, если вы хотите предоставить общий доступ к одному экземпляру Azure SignalR для разных серверов приложений, содержащих одинаковые имена концентраторов. Если не задано, все подключенные серверы приложений считаются экземплярами одного приложения.

ClaimProvider

  • Значение по умолчанию: null.
  • Этот параметр управляет утверждениями, которые необходимо связать с подключением клиента. Он используется при создании маркера доступа для клиента в запросе на согласование клиента. По умолчанию все утверждения из IOwinContext.Authentication.User согласованного запроса зарезервированы.
  • Как правило, этот параметр следует оставить как есть. Убедитесь, что вы понимаете, что происходит перед настройкой.

AccessTokenLifetime

  • Значение по умолчанию: 1 hour.
  • Этот параметр управляет допустимым временем существования маркера доступа, который пакет SDK службы создает для каждого клиента. Маркер доступа возвращается в ответ на запрос на согласование клиента.
  • Когда ServerSentEvent или LongPolling используется в качестве транспорта, подключение клиента будет закрыто из-за сбоя проверки подлинности после истечения срока действия. Это значение можно увеличить, чтобы избежать отключения клиента.

AccessTokenAlgorithm

  • Значение по умолчанию — HS256
  • Этот параметр предоставляет выбор SecurityAlgorithms при создании маркера доступа. Теперь поддерживаются HS256 необязательные значения и HS512. Обратите внимание, что HS512 более безопасный, но созданный маркер сравнительно длиннее, чем используется HS256.

ServerStickyMode

  • Значение по умолчанию: Disabled.
  • Этот параметр задает режим для прилипания сервера. Когда клиент направляется на сервер, с которым он сначала ведет переговоры, мы называем его липким сервером.
  • В распределенных сценариях может быть несколько серверов приложений, подключенных к одному экземпляру Azure SignalR. Как объясняют внутренние подключения клиентов, клиент сначала ведет переговоры с сервером приложений, а затем перенаправляется в Azure SignalR, чтобы установить постоянное подключение. Затем Azure SignalR находит один сервер приложений для обслуживания клиента, как объясняет транспорт данных между клиентом и сервером .
    • Когда Disabledклиент направляется на случайный сервер приложений. Как правило, серверы приложений имеют сбалансированные клиентские подключения с этим режимом. Если ваши сценарии широковещательны или групповые отправки, используйте этот параметр по умолчанию достаточно.
    • Когда PreferredAzure SignalR пытается найти сервер приложений, с которым клиент сначала согласен, так как не требуется никакой другой стоимости или глобальной маршрутизации. Это может быть полезно при отправке сценария в подключение*. Отправка в подключение может иметь более высокую производительность и меньшую задержку, когда отправитель и получатель перенаправляются на тот же сервер приложений.
    • Когда RequiredAzure SignalR всегда пытается найти сервер приложений, с которым клиент сначала согласуется. Этот параметр может быть полезен, если некоторый контекст клиента извлекается из negotiate шага и хранится в памяти, а затем используется внутри Hubs. Однако этот вариант может иметь недостатки производительности, так как для этого требуется Azure SignalR предпринять другие усилия для глобального поиска этого конкретного сервера приложений, а также для глобальной маршрутизации трафика между клиентом и сервером.

MaxPollIntervalInSeconds

  • Значение по умолчанию — 5
  • Этот параметр определяет максимальное время простоя, допустимое для неактивных подключений в Служба Azure SignalR. В ASP.NET SignalR применяется к типу транспорта или повторному подключению для длинного опроса. Если следующий /reconnect или /poll запрос не вступают в MaxPollIntervalInSecondsсистему, Служба Azure SignalR очищает подключение клиента.
  • Значение ограничено [1, 300].

Пример

Вы можете настроить приведенные выше параметры, как в следующем примере кода.

app.Map("/signalr",subApp => subApp.RunAzureSignalR(this.GetType().FullName, new HubConfiguration(), options =>
{
    options.InitialHubServerConnectionCount = 1;
    options.AccessTokenLifetime = TimeSpan.FromDays(1);
    options.ClaimProvider = context => context.Authentication?.User.Claims;
}));

Горизонтальное масштабирование сервера приложений

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

  • Несколько серверов приложений могут подключаться к одному экземпляру Служба Azure SignalR.
  • Если вы хотите предоставить общий доступ к одному экземпляру Azure SignalR для разных приложений с одинаковыми именами концентраторов, задайте их с разными параметрами ApplicationName . Если не задано, все подключенные серверы приложений считаются экземплярами одного приложения.
  • Если параметр ApplicationName и имя класса концентратора совпадают, подключения с разных серверов приложений группируются в одном концентраторе.
  • Каждое клиентское подключение создается только на одном из серверов приложений, а сообщения от этого клиента отправляются только на тот же сервер приложений. Если вы хотите получить доступ к данным клиента глобально (с всех серверов приложений), необходимо использовать централизованное хранилище для сохранения сведений о клиенте со всех серверов приложений.

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

Из этой статьи вы узнаете, как использовать Служба SignalR в приложениях. Дополнительные сведения о Служба SignalR см. в следующих статьях.

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