Использование Служба Azure SignalR
В этой статье показано, как использовать пакет SDK на стороне сервера приложений для подключения к Служба SignalR при использовании SignalR на сервере приложений.
Создание экземпляра службы Azure 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
клиент направляется на случайный сервер приложений. Как правило, серверы приложений имеют сбалансированные клиентские подключения с этим режимом. Если ваши сценарии широковещательны или групповые отправки, используйте этот параметр по умолчанию достаточно. - Когда
Preferred
Azure SignalR пытается найти сервер приложений, с которым клиент сначала согласен, так как не требуется никакой другой стоимости или глобальной маршрутизации. Это может быть полезно при отправке сценария в подключение*. Отправка в подключение может иметь более высокую производительность и меньшую задержку, когда отправитель и получатель перенаправляются на тот же сервер приложений. - Когда
Required
Azure SignalR всегда пытается найти сервер приложений, с которым клиент сначала согласуется. Этот параметр может быть полезен, если некоторый контекст клиента извлекается изnegotiate
шага и хранится в памяти, а затем используется внутриHub
s. Однако этот вариант может иметь недостатки производительности, так как для этого требуется 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
клиент направляется на случайный сервер приложений. Как правило, серверы приложений имеют сбалансированные клиентские подключения с этим режимом. Если ваши сценарии широковещательны или групповые отправки, используйте этот параметр по умолчанию достаточно. - Когда
Preferred
Azure SignalR пытается найти сервер приложений, с которым клиент сначала согласен, так как не требуется никакой другой стоимости или глобальной маршрутизации. Это может быть полезно при отправке сценария в подключение*. Отправка в подключение может иметь более высокую производительность и меньшую задержку, когда отправитель и получатель перенаправляются на тот же сервер приложений. - Когда
Required
Azure SignalR всегда пытается найти сервер приложений, с которым клиент сначала согласуется. Этот параметр может быть полезен, если некоторый контекст клиента извлекается изnegotiate
шага и хранится в памяти, а затем используется внутриHub
s. Однако этот вариант может иметь недостатки производительности, так как для этого требуется 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)