Použití služby Azure SignalR
V tomto článku se dozvíte, jak se pomocí sady SDK na straně aplikačního serveru připojit ke službě SignalR, když používáte SignalR na aplikačním serveru.
Vytvoření instance služby Azure SignalR Service
Postupujte podle rychlého startu: Pomocí šablony ARM nasaďte Azure SignalR k vytvoření instance služby SignalR.
Pro ASP.NET Core SignalR
Nainstalujte sadu SDK .
Spuštěním příkazu nainstalujte sadu SIGNALR Service SDK do projektu ASP.NET Core.
dotnet add package Microsoft.Azure.SignalR
Ve vaší Startup
třídě použijte sadu SDK služby SignalR jako následující fragment kódu.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR()
.AddAzureSignalR();
}
public void Configure(IApplicationBuilder app)
{
app.UseEndpoints(routes =>
{
routes.MapHub<YourHubClass>("/path_for_your_hub");
});
}
Konfigurace připojovací řetězec
Existují dva přístupy ke konfiguraci připojovací řetězec služby SignalR Service ve vaší aplikaci.
Nastavte proměnnou prostředí s názvem
Azure:SignalR:ConnectionString
neboAzure__SignalR__ConnectionString
.- V Aplikace Azure Service ji umístěte do nastavení aplikace.
Předejte připojovací řetězec jako parametr .
AddAzureSignalR()
services.AddSignalR() .AddAzureSignalR("<replace with your connection string>");
nebo
services.AddSignalR() .AddAzureSignalR(options => options.ConnectionString = "<replace with your connection string>");
Konfigurace možností
Při použití sady SDK služby Azure SignalR můžete přizpůsobit několik možností .
ConnectionString
- Výchozí hodnota je
Azure:SignalR:ConnectionString
connectionString
soubor neboappSetting
vweb.config
souboru. - Dá se překonfigurovat, ale ujistěte se, že hodnota není pevně zakódovaná.
InitialHubServerConnectionCount
- Výchozí hodnota je
5
. - Tato možnost řídí počáteční počet připojení na centrum mezi aplikačním serverem a službou Azure SignalR. Obvykle ji ponechejte jako výchozí hodnotu dostatečná. Během běhu může sada SDK spustit nová připojení serveru pro ladění výkonu nebo vyrovnávání zatížení. Pokud máte velký počet klientů, můžete mu dát větší počet pro lepší propustnost. Pokud máte například celkem 100 000 klientů, můžete počet připojení zvýšit na
10
nebo15
.
MaxHubServerConnectionCount
- Výchozí hodnota je
null
. - Tato možnost řídí maximální počet připojení povolených pro každé centrum mezi aplikačním serverem a službou Azure SignalR. Během běhu může sada SDK spustit nová připojení serveru pro ladění výkonu nebo vyrovnávání zatížení. Ve výchozím nastavení se nové připojení k serveru spustí vždy, když je to potřeba. Pokud je nakonfigurovaný maximální povolený počet připojení serveru, sada SDK nespustí nová připojení, když počet připojení k serveru dosáhne limitu.
ApplicationName
- Výchozí hodnota je
null
. - Tato možnost může být užitečná, když chcete sdílet stejnou instanci Azure SignalR pro různé aplikační servery, které obsahují stejné názvy center. Pokud není nastavená, považují se všechny připojené aplikační servery za instance stejné aplikace.
ClaimsProvider
- Výchozí hodnota je
null
. - Tato možnost určuje, jaké deklarace identity chcete přidružit k připojení klienta.
Používá se, když sada SDK služby vygeneruje přístupový token pro klienta v žádosti o vyjednávání klienta.
Ve výchozím nastavení jsou všechny deklarace identity z
HttpContext.User
vyjednané žádosti rezervované. Mohou být přístupné na adreseHub.Context.User
. - Normálně byste tuto možnost měli ponechat tak, jak je. Před přizpůsobením se ujistěte, že rozumíte tomu, co se stane.
AccessTokenLifetime
- Výchozí hodnota je
1 hour
. - Tato možnost řídí platnou životnost přístupového tokenu, kterou sada SDK služby vygeneruje pro každého klienta. Přístupový token se vrátí v odpovědi na žádost klienta negotiate.
- Pokud
ServerSentEvent
neboLongPolling
se používá jako přenos, připojení klienta bude ukončeno kvůli selhání ověřování po vypršení platnosti. Tuto hodnotu můžete zvýšit, abyste se vyhnuli odpojení klienta.
AccessTokenAlgorithm
- Výchozí hodnota je
HS256
- Tato možnost poskytuje možnost výběru
SecurityAlgorithms
při generování přístupového tokenu. Nyní podporované volitelné hodnoty jsouHS256
aHS512
. Všimněte si, že je bezpečnější,HS512
ale vygenerovaný token je poměrně delší než použitíHS256
.
ServerStickyMode
- Výchozí hodnota je
Disabled
. - Tato možnost určuje režim pro server sticky. Když je klient směrován na server, se kterým se poprvé vyjedná, nazýváme server sticky.
- V distribuovaných scénářích může existovat několik aplikačních serverů připojených k jedné instanci Azure SignalR. Jak vysvětluje interní informace o připojeních klientů, klient nejprve vyjedná s aplikačním serverem a pak přesměruje na Azure SignalR, aby vytvořil trvalé připojení. Azure SignalR pak najde jeden aplikační server, který bude sloužit klientovi, jak vysvětluje přenos dat mezi klientem a serverem .
- Když
Disabled
klient směruje na náhodný aplikační server. Obecně platí, že aplikační servery mají vyvážená připojení klientů k tomuto režimu. Pokud jsou vaše scénáře vysílání nebo odesílání skupin, použijte tuto výchozí možnost. - Když
Preferred
se Azure SignalR pokusí najít aplikační server, se kterým klient nejprve vyjednává způsobem, který nevyžaduje žádné jiné náklady nebo globální směrování. To může být užitečné, když se váš scénář odešle do připojení*. Odesílání do připojení může mít lepší výkon a nižší latenci, když se odesílatel a příjemce směrují na stejný aplikační server. - Když
Required
se Azure SignalR vždy pokusí najít aplikační server, se kterým klient nejprve vyjedná. Tato možnost může být užitečná, když se některý kontext klienta načte znegotiate
kroku a uloží do paměti a pak se použije uvnitřHub
s. Tato možnost ale může mít nevýhody výkonu, protože vyžaduje, aby služba Azure SignalR zjistila další úsilí o globální nalezení tohoto konkrétního aplikačního serveru a aby se provoz mezi klientem a serverem směrovaly globálně.
- Když
GracefulShutdown
GracefulShutdown.Mode
- Výchozí hodnota je
Off
- Tato možnost určuje chování po přijetí SIGINT (CTRL+C) aplikačního serveru.
- Pokud je nastavená hodnota
WaitForClientsClose
, místo okamžitého zastavení serveru ho odebereme ze služby Azure SignalR, abychom zabránili přiřazení nových klientských připojení k tomuto serveru. - Když je navíc nastavená hodnota
MigrateClients
, pokusíme se migrovat připojení klientů na jiný platný server. Migrace se aktivuje až po doručení zprávy.OnConnected
aOnDisconnected
aktivují se při migraci nebo ukončení připojení.IConnectionMigrationFeature
vám může pomoct zjistit, jestli je připojení migrované nebo mimo připojení.- Podrobné informace o využití najdete v našich vzorových kódech .
GracefulShutdown.Timeout
- Výchozí hodnota je
30 seconds
- Tato možnost určuje nejdelší dobu čekání na zavření nebo migraci klientů.
ServiceScaleTimeout
- Výchozí hodnota je
5 minutes
- Tato možnost určuje nejdelší dobu čekání na koncové body služby dynamického škálování, které mají vliv minimálně na online klienty. Dynamické škálování mezi jedním aplikačním serverem a koncovým bodem služby se obvykle dá dokončit během několika sekund, přičemž zvažte, jestli máte více aplikačních serverů a více koncových bodů služby s jitterem sítě a chcete zajistit stabilitu klienta, můžete tuto hodnotu odpovídajícím způsobem nakonfigurovat.
MaxPollIntervalInSeconds
- Výchozí hodnota je
5
- Tato možnost definuje maximální povolený interval dotazování pro
LongPolling
připojení ve službě Azure SignalR. Pokud další požadavek na hlasování nepřijde v rámciMaxPollIntervalInSeconds
, služba Azure SignalR vyčistí připojení klienta. - Hodnota je omezena na
[1, 300]
.
TransportTypeDetector
- Výchozí hodnota: Jsou povoleny všechny přenosy.
- Tato možnost definuje funkci pro přizpůsobení přenosů, které můžou klienti použít k odesílání požadavků HTTP.
- Místo konfigurace přenosů použijte tyto možnosti
HttpConnectionDispatcherOptions.Transports
.
Vzorek
Můžete nakonfigurovat výše uvedené možnosti, jako je následující ukázkový kód.
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;
});
Pro starší verzi ASP.NET SignalR
Poznámka:
Pokud se službou SignalR poprvé zkoušíte, doporučujeme používat ASP.NET Core SignalR, je jednodušší, spolehlivější a jednodušší.
Nainstalujte sadu SDK .
Nainstalujte sadu SignalR Service SDK do projektu ASP.NET pomocí konzoly Správce balíčků:
Install-Package Microsoft.Azure.SignalR.AspNet
Ve vaší Startup
třídě použijte jako následující fragment kódu sadu SDK služby SignalR, nahraďte MapSignalR()
ji MapAzureSignalR({your_applicationName})
. Nahraďte {YourApplicationName}
název vaší aplikace, jedná se o jedinečný název pro rozlišení této aplikace s jinými aplikacemi. Jako hodnotu můžete použít this.GetType().FullName
.
public void Configuration(IAppBuilder app)
{
app.MapAzureSignalR(this.GetType().FullName);
}
Konfigurace připojovací řetězec
Nastavte připojovací řetězec v web.config
souboru na connectionStrings
oddíl:
<configuration>
<connectionStrings>
<add name="Azure:SignalR:ConnectionString" connectionString="Endpoint=...;AccessKey=..."/>
</connectionStrings>
...
</configuration>
Konfigurace možností
Při použití sady SDK služby Azure SignalR můžete přizpůsobit několik možností .
ConnectionString
- Výchozí hodnota je
Azure:SignalR:ConnectionString
connectionString
soubor neboappSetting
vweb.config
souboru. - Dá se překonfigurovat, ale ujistěte se, že hodnota není pevně zakódovaná.
InitialHubServerConnectionCount
- Výchozí hodnota je
5
. - Tato možnost řídí počáteční počet připojení na centrum mezi aplikačním serverem a službou Azure SignalR. Obvykle ji ponechejte jako výchozí hodnotu dostatečná. Během běhu může sada SDK spustit nová připojení serveru pro ladění výkonu nebo vyrovnávání zatížení. Pokud máte velký počet klientů, můžete mu dát větší počet pro lepší propustnost. Pokud máte například celkem 100 000 klientů, můžete počet připojení zvýšit na
10
nebo15
.
MaxHubServerConnectionCount
- Výchozí hodnota je
null
. - Tato možnost řídí maximální počet připojení povolených pro každé centrum mezi aplikačním serverem a službou Azure SignalR. Během běhu může sada SDK spustit nová připojení serveru pro ladění výkonu nebo vyrovnávání zatížení. Ve výchozím nastavení se nové připojení k serveru spustí vždy, když je to potřeba. Pokud je nakonfigurovaný maximální povolený počet připojení serveru, sada SDK nespustí nová připojení, když počet připojení k serveru dosáhne limitu.
ApplicationName
- Výchozí hodnota je
null
. - Tato možnost může být užitečná, když chcete sdílet stejnou instanci Azure SignalR pro různé aplikační servery, které obsahují stejné názvy center. Pokud není nastavená, považují se všechny připojené aplikační servery za instance stejné aplikace.
ClaimProvider
- Výchozí hodnota je
null
. - Tato možnost určuje, jaké deklarace identity chcete přidružit k připojení klienta.
Používá se, když sada SDK služby vygeneruje přístupový token pro klienta v žádosti o vyjednávání klienta.
Ve výchozím nastavení jsou všechny deklarace identity z
IOwinContext.Authentication.User
vyjednané žádosti rezervované. - Normálně byste tuto možnost měli ponechat tak, jak je. Před přizpůsobením se ujistěte, že rozumíte tomu, co se stane.
AccessTokenLifetime
- Výchozí hodnota je
1 hour
. - Tato možnost řídí platnou životnost přístupového tokenu, který sada SDK služby generuje pro každého klienta. Přístupový token se vrátí v odpovědi na žádost klienta negotiate.
- Pokud
ServerSentEvent
neboLongPolling
se používá jako přenos, připojení klienta bude ukončeno kvůli selhání ověřování po vypršení platnosti. Tuto hodnotu můžete zvýšit, abyste se vyhnuli odpojení klienta.
AccessTokenAlgorithm
- Výchozí hodnota je
HS256
- Tato možnost poskytuje možnost výběru
SecurityAlgorithms
při generování přístupového tokenu. Nyní podporované volitelné hodnoty jsouHS256
aHS512
. Všimněte si, že je bezpečnější,HS512
ale vygenerovaný token je poměrně delší než použitíHS256
.
ServerStickyMode
- Výchozí hodnota je
Disabled
. - Tato možnost určuje režim pro server sticky. Když je klient směrován na server, se kterým se poprvé vyjedná, nazýváme server sticky.
- V distribuovaných scénářích může existovat několik aplikačních serverů připojených k jedné instanci Azure SignalR. Jak vysvětluje interní informace o připojeních klientů, klient nejprve vyjedná s aplikačním serverem a pak přesměruje na Azure SignalR, aby vytvořil trvalé připojení. Azure SignalR pak najde jeden aplikační server, který bude sloužit klientovi, jak vysvětluje přenos dat mezi klientem a serverem .
- Když
Disabled
klient směruje na náhodný aplikační server. Obecně platí, že aplikační servery mají vyvážená připojení klientů k tomuto režimu. Pokud jsou vaše scénáře vysílání nebo odesílání skupin, použijte tuto výchozí možnost. - Když
Preferred
se Azure SignalR pokusí najít aplikační server, se kterým klient nejprve vyjednává způsobem, který nevyžaduje žádné jiné náklady nebo globální směrování. To může být užitečné, když se váš scénář odešle do připojení*. Odesílání do připojení může mít lepší výkon a nižší latenci, když se odesílatel a příjemce směrují na stejný aplikační server. - Když
Required
se Azure SignalR vždy pokusí najít aplikační server, se kterým klient nejprve vyjedná. Tato možnost může být užitečná, když se některý kontext klienta načte znegotiate
kroku a uloží do paměti a pak se použije uvnitřHub
s. Tato možnost ale může mít nevýhody výkonu, protože vyžaduje, aby služba Azure SignalR zjistila další úsilí o globální nalezení tohoto konkrétního aplikačního serveru a aby se provoz mezi klientem a serverem směrovaly globálně.
- Když
MaxPollIntervalInSeconds
- Výchozí hodnota je
5
- Tato možnost definuje maximální dobu nečinnosti povolenou pro neaktivní připojení ve službě Azure SignalR. V ASP.NET SignalR se vztahuje na typ přenosu dlouhého dotazování nebo opětovné připojení. Pokud se další
/reconnect
nebo/poll
požadavek nenachází v rámciMaxPollIntervalInSeconds
, služba Azure SignalR vyčistí připojení klienta. - Hodnota je omezena na
[1, 300]
.
Vzorek
Můžete nakonfigurovat výše uvedené možnosti, jako je následující ukázkový kód.
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;
}));
Horizontální navýšení kapacity aplikačního serveru
Díky službě Azure SignalR se trvalá připojení přesměrují z aplikačního serveru, abyste se mohli soustředit na implementaci obchodní logiky ve třídách centra. Stále ale potřebujete škálovat aplikační servery pro lepší výkon při zpracování rozsáhlých klientských připojení. Níže je několik tipů pro horizontální navýšení kapacity aplikačních serverů.
- Ke stejné instanci služby Azure SignalR se může připojit více aplikačních serverů.
- Pokud chcete sdílet stejnou instanci Azure SignalR pro různé aplikace, které obsahují stejné názvy rozbočovačů, nastavte je s jinou možností ApplicationName . Pokud není nastavená, považují se všechny připojené aplikační servery za instance stejné aplikace.
- Pokud je možnost ApplicationName a název třídy centra stejné, jsou připojení z různých aplikačních serverů seskupené ve stejném centru.
- Každé připojení klienta je vytvořeno pouze v jednom z aplikačních serverů a zprávy z tohoto klienta se odesílají pouze na stejný aplikační server. Pokud chcete přistupovat k klientským informacím globálně (ze všech aplikačních serverů), musíte použít centralizované úložiště k ukládání informací o klientovi ze všech aplikačních serverů.
Další kroky
V tomto článku se dozvíte, jak používat službu SignalR Service ve vašich aplikacích. Další informace o službě SignalR Najdete v následujících článcích.