Använda Azure SignalR Service
Den här artikeln visar hur du använder SDK på appserversidan för att ansluta till SignalR Service när du använder SignalR på appservern.
Viktigt!
Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte.
En anslutningssträng innehåller den auktoriseringsinformation som krävs för att ditt program ska få åtkomst till Azure SignalR Service. Åtkomstnyckeln i anslutningssträng liknar ett rotlösenord för din tjänst. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda dina anslutningssträng med hjälp av Microsoft Entra-ID och auktorisera åtkomst med Microsoft Entra-ID.
Undvik att distribuera åtkomstnycklar till andra användare, hårdkoda dem eller spara dem var som helst i oformaterad text som är tillgänglig för andra. Rotera dina nycklar om du tror att de har komprometterats.
Skapa en Azure SignalR Service-instans
Följ snabbstart: Använd en ARM-mall för att distribuera Azure SignalR för att skapa en SignalR-tjänstinstans.
För ASP.NET Core SignalR
Installera SDK:n
Kör kommandot för att installera SignalR Service SDK i ditt ASP.NET Core-projekt.
dotnet add package Microsoft.Azure.SignalR
I klassen Startup
använder du SignalR Service SDK som följande kodfragment.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR()
.AddAzureSignalR();
}
public void Configure(IApplicationBuilder app)
{
app.UseEndpoints(routes =>
{
routes.MapHub<YourHubClass>("/path_for_your_hub");
});
}
Konfigurera anslutningssträng
Råa anslutningssträng visas endast i den här artikeln i demonstrationssyfte. Skydda alltid dina åtkomstnycklar i produktionsmiljöer. Använd Azure Key Vault för att hantera och rotera dina nycklar på ett säkert sätt och skydda dina anslutningssträng med hjälp av Microsoft Entra-ID och auktorisera åtkomst med Microsoft Entra-ID.
Det finns två metoder för att konfigurera SignalR-tjänstens anslutningssträng i ditt program.
Ange en miljövariabel med namn
Azure:SignalR:ConnectionString
ellerAzure__SignalR__ConnectionString
.- I Azure App Service placerar du den i programinställningar.
Skicka anslutningssträng som en parameter för
AddAzureSignalR()
.services.AddSignalR() .AddAzureSignalR("<replace with your connection string>");
eller
services.AddSignalR() .AddAzureSignalR(options => options.ConnectionString = "<replace with your connection string>");
Konfigurera alternativ
Det finns några alternativ som du kan anpassa när du använder Azure SignalR Service SDK.
ConnectionString
- Standardvärdet är
Azure:SignalR:ConnectionString
filen ellerappSetting
web.config
.connectionString
- Det kan konfigureras om, men kontrollera att värdet INTE är hårdkodat.
InitialHubServerConnectionCount
- Standardvärdet är
5
. - Det här alternativet styr det första antalet anslutningar per hubb mellan programservern och Azure SignalR Service. Behåll det vanligtvis eftersom standardvärdet räcker. Under körningen kan SDK starta nya serveranslutningar för prestandajustering eller belastningsutjämning. När du har ett stort antal klienter kan du ge det ett större antal för bättre dataflöde. Om du till exempel har totalt 100 000 klienter kan antalet anslutningar ökas till
10
eller15
.
MaxHubServerConnectionCount
- Standardvärdet är
null
. - Det här alternativet styr det maximala antalet anslutningar som tillåts per hubb mellan programservern och Azure SignalR Service. Under körningen kan SDK starta nya serveranslutningar för prestandajustering eller belastningsutjämning. Som standard startar en ny serveranslutning när det behövs. När det maximala antalet tillåtna serveranslutningar har konfigurerats startar inte SDK:n nya anslutningar när antalet serveranslutningar når gränsen.
ApplicationName
- Standardvärdet är
null
. - Det här alternativet kan vara användbart när du vill dela samma Azure SignalR-instans för olika appservrar som innehåller samma hubbnamn. Om de inte har angetts anses alla anslutna appservrar vara instanser av samma program.
ClaimsProvider
- Standardvärdet är
null
. - Det här alternativet styr vilka anspråk du vill associera med klientanslutningen.
Den används när Service SDK genererar åtkomsttoken för klienten i klientens förhandlingsbegäran.
Som standard är alla anspråk från
HttpContext.User
den förhandlade begäran reserverade. De kan nås påHub.Context.User
. - Normalt bör du lämna det här alternativet som det är. Se till att du förstår vad som händer innan du anpassar det.
AccessTokenLifetime
- Standardvärdet är
1 hour
. - Det här alternativet styr den giltiga livslängden för åtkomsttoken som Service SDK genererar för varje klient. Åtkomsttoken returneras i svaret på klientens förhandlingsbegäran.
- När
ServerSentEvent
ellerLongPolling
används som transport stängs klientanslutningen på grund av autentiseringsfel efter den förfallna tiden. Du kan öka det här värdet för att undvika att klienten kopplas från.
AccessTokenAlgorithm
- Standardvärdet är
HS256
- Det här alternativet ger val av
SecurityAlgorithms
när du genererar åtkomsttoken. Nu stöds valfria värden ochHS256
HS512
. Observera att ärHS512
säkrare men den genererade token är jämförelsevis längre än den som använderHS256
.
ServerStickyMode
- Standardvärdet är
Disabled
. - Det här alternativet anger läget för server sticky. När klienten dirigeras till den server som den först förhandlar med, kallar vi den server klibbig.
- I distribuerade scenarier kan det finnas flera appservrar anslutna till en Azure SignalR-instans. Som interna klientanslutningar förklarar förhandlar klienten först med appservern och omdirigerar sedan till Azure SignalR för att upprätta den beständiga anslutningen. Azure SignalR hittar sedan en appserver som betjänar klienten, som transportdata mellan klient och server förklarar.
- När
Disabled
dirigerar klienten till en slumpmässig appserver. I allmänhet har appservrar balanserade klientanslutningar med det här läget. Om dina scenarier sänds eller grupp skickas använder du det här standardalternativet är tillräckligt. - När
Preferred
försöker Azure SignalR hitta den appserver som klienten först förhandlar med på ett sätt som ingen annan kostnad eller global routning behövs. Den här kan vara användbar när ditt scenario skickas till anslutningen*. Skicka till anslutning kan ha bättre prestanda och kortare svarstid när avsändaren och mottagaren dirigeras till samma appserver. - När
Required
försöker Azure SignalR alltid hitta den appserver som klienten först förhandlar med. Det här alternativet kan vara användbart när en del klientkontext hämtas frånnegotiate
steg och lagras i minnet och sedan används iHub
s. Det här alternativet kan dock ha prestandarestitutioner eftersom det kräver att Azure SignalR vidtar andra åtgärder för att hitta den här appservern globalt och för att fortsätta dirigera trafik globalt mellan klient och server.
- När
GracefulShutdown
GracefulShutdown.Mode
- Standardvärdet är
Off
- Det här alternativet anger beteendet när appservern tar emot en SIGINT (CTRL + C).
- När inställningen är inställd på , i stället för att
WaitForClientsClose
stoppa servern omedelbart, tar vi bort den från Azure SignalR Service för att förhindra att nya klientanslutningar tilldelas till den här servern. - När det är inställt
MigrateClients
på försöker vi dessutom migrera klientanslutningar till en annan giltig server. Migreringen utlöses först när ett meddelande har levererats.OnConnected
ochOnDisconnected
utlöses när anslutningar migreras in/ut.IConnectionMigrationFeature
kan hjälpa dig att identifiera om anslutningen migreras in/ut.- Se våra exempelkoder för detaljerad användning.
GracefulShutdown.Timeout
- Standardvärdet är
30 seconds
- Det här alternativet anger den längsta tiden i väntan på att klienter ska stängas/migreras.
ServiceScaleTimeout
- Standardvärdet är
5 minutes
- Det här alternativet anger den längsta tiden i väntan på tjänstslutpunkter för dynamisk skalning, som ska påverka onlineklienter minst. Normalt kan den dynamiska skalningen mellan en enskild appserver och en tjänstslutpunkt avslutas på några sekunder, samtidigt som du överväger om du har flera appservrar och flera tjänstslutpunkter med nätverks jitter och vill säkerställa klientstabilitet, kan du konfigurera det här värdet i enlighet med detta.
MaxPollIntervalInSeconds
- Standardvärdet är
5
- Det här alternativet definierar det maximala avsökningsintervall som tillåts för
LongPolling
anslutningar i Azure SignalR Service. Om nästa avsökningsbegäran inte kommer in iMaxPollIntervalInSeconds
rensar Azure SignalR Service klientanslutningen. - Värdet är begränsat till
[1, 300]
.
TransportTypeDetector
- Standardvärde: Alla transporter är aktiverade.
- Det här alternativet definierar en funktion för att anpassa de transporter som klienter kan använda för att skicka HTTP-begäranden.
- Använd de här alternativen i stället
HttpConnectionDispatcherOptions.Transports
för att konfigurera transporter.
AllowStatefulReconnects
- Standardvärdet är
null
- Det här alternativet aktiverar eller inaktiverar tillståndskänsliga återanslutningar för alla hubbar.
- Om
null
läser SDK hubbinställningarna. - Om
true
aktiverar Azure SignalR Service tillståndskänsliga återanslutningar i alla deklarerade hubbar. Och klienter behöver aktivera tillståndskänsliga återanslutningar på klientsidan. - Om
false
inaktiverar Azure SignalR Service tillståndskänsliga återanslutningar i alla deklarerade hubbar.
Exempel
Du kan konfigurera ovanstående alternativ, till exempel följande exempelkod.
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;
});
För den äldre ASP.NET SignalR
Kommentar
Om det är första gången du provar SignalR rekommenderar vi att du använder ASP.NET Core SignalR, det är enklare, mer tillförlitligt och enklare att använda.
Installera SDK:n
Installera SignalR Service SDK i ditt ASP.NET projekt med Package Manager Console:
Install-Package Microsoft.Azure.SignalR.AspNet
I klassen Startup
använder du SignalR Service SDK som följande kodfragment och ersätter MapSignalR()
till MapAzureSignalR({your_applicationName})
. Ersätt {YourApplicationName}
med namnet på ditt program, det här är det unika namnet för att särskilja det här programmet med dina andra program. Du kan använda this.GetType().FullName
som värde.
public void Configuration(IAppBuilder app)
{
app.MapAzureSignalR(this.GetType().FullName);
}
Konfigurera anslutningssträng
Ange anslutningssträng i web.config
filen till avsnittetconnectionStrings
:
<configuration>
<connectionStrings>
<add name="Azure:SignalR:ConnectionString" connectionString="Endpoint=...;AccessKey=..."/>
</connectionStrings>
...
</configuration>
Konfigurera alternativ
Det finns några alternativ som du kan anpassa när du använder Azure SignalR Service SDK.
ConnectionString
- Standardvärdet är
Azure:SignalR:ConnectionString
filen ellerappSetting
web.config
.connectionString
- Det kan konfigureras om, men kontrollera att värdet INTE är hårdkodat.
InitialHubServerConnectionCount
- Standardvärdet är
5
. - Det här alternativet styr det första antalet anslutningar per hubb mellan programservern och Azure SignalR Service. Behåll det vanligtvis eftersom standardvärdet räcker. Under körningen kan SDK starta nya serveranslutningar för prestandajustering eller belastningsutjämning. När du har ett stort antal klienter kan du ge det ett större antal för bättre dataflöde. Om du till exempel har totalt 100 000 klienter kan antalet anslutningar ökas till
10
eller15
.
MaxHubServerConnectionCount
- Standardvärdet är
null
. - Det här alternativet styr det maximala antalet anslutningar som tillåts per hubb mellan programservern och Azure SignalR Service. Under körningen kan SDK starta nya serveranslutningar för prestandajustering eller belastningsutjämning. Som standard startar en ny serveranslutning när det behövs. När det maximala antalet tillåtna serveranslutningar har konfigurerats startar inte SDK:n nya anslutningar när antalet serveranslutningar når gränsen.
ApplicationName
- Standardvärdet är
null
. - Det här alternativet kan vara användbart när du vill dela samma Azure SignalR-instans för olika appservrar som innehåller samma hubbnamn. Om de inte har angetts anses alla anslutna appservrar vara instanser av samma program.
ClaimProvider
- Standardvärdet är
null
. - Det här alternativet styr vilka anspråk du vill associera med klientanslutningen.
Den används när Service SDK genererar åtkomsttoken för klienten i klientens förhandlingsbegäran.
Som standard är alla anspråk från
IOwinContext.Authentication.User
den förhandlade begäran reserverade. - Normalt bör du lämna det här alternativet som det är. Se till att du förstår vad som händer innan du anpassar det.
AccessTokenLifetime
- Standardvärdet är
1 hour
. - Det här alternativet styr den giltiga livslängden för åtkomsttoken, som Service SDK genererar för varje klient. Åtkomsttoken returneras i svaret på klientens förhandlingsbegäran.
- När
ServerSentEvent
ellerLongPolling
används som transport stängs klientanslutningen på grund av autentiseringsfel efter den förfallna tiden. Du kan öka det här värdet för att undvika att klienten kopplas från.
AccessTokenAlgorithm
- Standardvärdet är
HS256
- Det här alternativet ger val av
SecurityAlgorithms
när du genererar åtkomsttoken. Nu stöds valfria värden ochHS256
HS512
. Observera att ärHS512
säkrare men den genererade token är jämförelsevis längre än den som använderHS256
.
ServerStickyMode
- Standardvärdet är
Disabled
. - Det här alternativet anger läget för server sticky. När klienten dirigeras till den server som den först förhandlar med, kallar vi den server klibbig.
- I distribuerade scenarier kan det finnas flera appservrar anslutna till en Azure SignalR-instans. Som interna klientanslutningar förklarar förhandlar klienten först med appservern och omdirigerar sedan till Azure SignalR för att upprätta den beständiga anslutningen. Azure SignalR hittar sedan en appserver som betjänar klienten, som transportdata mellan klient och server förklarar.
- När
Disabled
dirigerar klienten till en slumpmässig appserver. I allmänhet har appservrar balanserade klientanslutningar med det här läget. Om dina scenarier sänds eller grupp skickas använder du det här standardalternativet är tillräckligt. - När
Preferred
försöker Azure SignalR hitta den appserver som klienten först förhandlar med på ett sätt som ingen annan kostnad eller global routning behövs. Den här kan vara användbar när ditt scenario skickas till anslutningen*. Skicka till anslutning kan ha bättre prestanda och kortare svarstid när avsändaren och mottagaren dirigeras till samma appserver. - När
Required
försöker Azure SignalR alltid hitta den appserver som klienten först förhandlar med. Det här alternativet kan vara användbart när en del klientkontext hämtas frånnegotiate
steg och lagras i minnet och sedan används iHub
s. Det här alternativet kan dock ha prestandarestitutioner eftersom det kräver att Azure SignalR vidtar andra åtgärder för att hitta den här appservern globalt och för att fortsätta dirigera trafik globalt mellan klient och server.
- När
MaxPollIntervalInSeconds
- Standardvärdet är
5
- Det här alternativet definierar den maximala inaktiva tid som tillåts för inaktiva anslutningar i Azure SignalR Service. I ASP.NET SignalR gäller det för lång avsökningstransporttyp eller återanslutning. Om nästa
/reconnect
begäran eller/poll
begäran inte kommer in iMaxPollIntervalInSeconds
rensar Azure SignalR Service klientanslutningen. - Värdet är begränsat till
[1, 300]
.
Exempel
Du kan konfigurera ovanstående alternativ, till exempel följande exempelkod.
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;
}));
Skala ut programserver
Med Azure SignalR Service avlastas beständiga anslutningar från programservern så att du kan fokusera på att implementera din affärslogik i hubbklasser. Men du behöver fortfarande skala ut programservrar för bättre prestanda vid hantering av massiva klientanslutningar. Nedan följer några tips för att skala ut programservrar.
- Flera programservrar kan ansluta till samma Azure SignalR Service-instans.
- Om du vill dela samma Azure SignalR-instans för olika program som innehåller samma hubbnamn anger du dem med ett annat ApplicationName-alternativ . Om de inte har angetts anses alla anslutna appservrar vara instanser av samma program.
- Så länge alternativet ApplicationName och namnet på hubbklassen är detsamma grupperas anslutningar från olika programservrar i samma hubb.
- Varje klientanslutning skapas bara på en av programservrarna och meddelanden från den klienten skickas endast till samma programserver. Om du vill komma åt klientinformation globalt (från alla programservrar) måste du använda centraliserad lagring för att spara klientinformation från alla programservrar.
Nästa steg
I den här artikeln får du lära dig hur du använder SignalR Service i dina program. Läs följande artiklar om du vill veta mer om SignalR Service.