Azure SignalR Service gebruiken
In dit artikel wordt beschreven hoe u SDK in de serverzijde van uw app gebruikt om verbinding te maken met SignalR Service wanneer u SignalR gebruikt in uw app-server.
Belangrijk
Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden.
Een verbindingsreeks bevat de autorisatiegegevens die nodig zijn voor uw toepassing om toegang te krijgen tot Azure SignalR Service. De toegangssleutel in de verbindingsreeks is vergelijkbaar met een hoofdwachtwoord voor uw service. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbindingsreeks te beveiligen met behulp van Microsoft Entra-id en toegang te autoriseren met Microsoft Entra ID.
Vermijd het distribueren van toegangssleutels naar andere gebruikers, het coderen ervan of het opslaan van ze ergens in tekst zonder opmaak die toegankelijk is voor anderen. Draai uw sleutels als u denkt dat ze mogelijk zijn aangetast.
Een Azure SignalR Service-exemplaar maken
Volg de quickstart: Een ARM-sjabloon gebruiken om Azure SignalR te implementeren om een SignalR-service-exemplaar te maken.
Voor ASP.NET Core SignalR
Installeer de SDK
Voer de opdracht uit om SignalR Service SDK te installeren in uw ASP.NET Core-project.
dotnet add package Microsoft.Azure.SignalR
Gebruik in uw Startup
klasse SignalR Service SDK als het volgende codefragment.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR()
.AddAzureSignalR();
}
public void Configure(IApplicationBuilder app)
{
app.UseEndpoints(routes =>
{
routes.MapHub<YourHubClass>("/path_for_your_hub");
});
}
Verbindingsreeks configureren
Onbewerkte verbindingsreeks worden alleen in dit artikel weergegeven voor demonstratiedoeleinden. Beveilig uw toegangssleutels altijd in productieomgevingen. Gebruik Azure Key Vault om uw sleutels veilig te beheren en te roteren en uw verbindingsreeks te beveiligen met behulp van Microsoft Entra-id en toegang te autoriseren met Microsoft Entra ID.
Er zijn twee manieren om de verbindingsreeks van SignalR Service in uw toepassing te configureren.
Stel een omgevingsvariabele in met de naam
Azure:SignalR:ConnectionString
ofAzure__SignalR__ConnectionString
.- Plaats deze in Azure-app Service in de toepassingsinstellingen.
Geef de verbindingsreeks door als een parameter van
AddAzureSignalR()
.services.AddSignalR() .AddAzureSignalR("<replace with your connection string>");
or
services.AddSignalR() .AddAzureSignalR(options => options.ConnectionString = "<replace with your connection string>");
Opties configureren
Er zijn enkele opties die u kunt aanpassen wanneer u de Azure SignalR Service SDK gebruikt.
ConnectionString
- De standaardwaarde is de
Azure:SignalR:ConnectionString
connectionString
ofappSetting
inweb.config
het bestand. - Deze kan opnieuw worden geconfigureerd, maar zorg ervoor dat de waarde niet in code is vastgelegd.
InitialHubServerConnectionCount
- De standaardwaarde is
5
. - Met deze optie bepaalt u het eerste aantal verbindingen per hub tussen de toepassingsserver en Azure SignalR Service. Bewaar deze meestal omdat de standaardwaarde voldoende is. Tijdens runtime kan de SDK nieuwe serververbindingen starten voor het afstemmen van prestaties of taakverdeling. Wanneer u een groot aantal clients hebt, kunt u het een groter aantal geven voor een betere doorvoer. Als u bijvoorbeeld in totaal 100.000 clients hebt, kan het aantal verbindingen worden verhoogd tot
10
of15
.
MaxHubServerConnectionCount
- De standaardwaarde is
null
. - Met deze optie bepaalt u het maximum aantal verbindingen dat per hub is toegestaan tussen toepassingsserver en Azure SignalR Service. Tijdens runtime kan de SDK nieuwe serververbindingen starten voor het afstemmen van prestaties of taakverdeling. Standaard wordt een nieuwe serververbinding gestart wanneer dat nodig is. Wanneer het maximum aantal toegestane serververbindingen is geconfigureerd, start de SDK geen nieuwe verbindingen wanneer het aantal serververbindingen de limiet bereikt.
ApplicationName
- De standaardwaarde is
null
. - Deze optie kan handig zijn als u hetzelfde Azure SignalR-exemplaar wilt delen voor verschillende app-servers met dezelfde hubnamen. Als deze niet is ingesteld, worden alle verbonden app-servers beschouwd als exemplaren van dezelfde toepassing.
ClaimsProvider
- De standaardwaarde is
null
. - Met deze optie bepaalt u welke claims u aan de clientverbinding wilt koppelen.
Deze wordt gebruikt wanneer service-SDK toegangstoken genereert voor de client in de onderhandelingsaanvraag van de client.
Standaard worden alle claims van
HttpContext.User
de onderhandelde aanvraag gereserveerd. Ze zijn toegankelijk opHub.Context.User
. - Normaal gesproken moet u deze optie laten staan zoals is. Zorg ervoor dat u begrijpt wat er gebeurt voordat u deze kunt aanpassen.
AccessTokenLifetime
- De standaardwaarde is
1 hour
. - Met deze optie bepaalt u de geldige levensduur van het toegangstoken dat door de Service SDK voor elke client wordt gegenereerd. Het toegangstoken wordt geretourneerd in het antwoord op de onderhandelingsaanvraag van de client.
- Wanneer
ServerSentEvent
ofLongPolling
wordt gebruikt als transport, wordt de clientverbinding gesloten vanwege een verificatiefout na de verlopen tijd. U kunt deze waarde verhogen om de verbinding met de client te voorkomen.
AccessTokenAlgorithm
- Standaardwaarde is
HS256
- Deze optie biedt de keuze bij het genereren van
SecurityAlgorithms
een toegangstoken. Nu wordenHS256
optionele waarden ondersteund enHS512
. Houd er rekening mee dat hetHS512
veiliger is, maar het gegenereerde token relatief langer is dan dat met behulp vanHS256
.
ServerStickyMode
- De standaardwaarde is
Disabled
. - Met deze optie geeft u de modus op voor serversticky. Wanneer de client wordt gerouteerd naar de server waarmee deze voor het eerst onderhandelt, noemen we deze server plakkerig.
- In gedistribueerde scenario's kunnen er meerdere app-servers zijn verbonden met één Azure SignalR-exemplaar. Zoals interne clientverbindingen uitlegt, onderhandelt de client eerst met de app-server en wordt vervolgens omgeleid naar Azure SignalR om de permanente verbinding tot stand te brengen. Azure SignalR zoekt vervolgens één app-server voor de client, zoals transportgegevens tussen client en server wordt uitgelegd.
- Wanneer
Disabled
wordt de client gerouteerd naar een willekeurige app-server. Over het algemeen hebben app-servers evenwichtige clientverbindingen met deze modus. Als uw scenario's worden uitgezonden of groep verzenden, gebruikt u deze standaardoptie voldoende. - Wanneer
Preferred
probeert Azure SignalR de app-server te vinden waarmee de client voor het eerst onderhandelt op een manier waarmee geen andere kosten of globale routering nodig is. Dit kan handig zijn wanneer uw scenario naar de verbinding wordt verzonden*. Verzenden naar verbinding kan betere prestaties en lagere latentie hebben wanneer de afzender en de ontvanger worden gerouteerd naar dezelfde app-server. - Wanneer
Required
probeert Azure SignalR altijd de app-server te vinden waarmee de client voor het eerst onderhandelt. Deze optie kan handig zijn wanneer bepaalde clientcontext wordt opgehaald uitnegotiate
de stap en wordt opgeslagen in het geheugen en vervolgens wordt gebruikt binnenHub
s. Deze optie kan echter prestatienadelen hebben, omdat Azure SignalR andere inspanningen moet ondernemen om deze specifieke app-server wereldwijd te vinden en om globaal routeringsverkeer tussen client en server te behouden.
- Wanneer
GracefulShutdown
GracefulShutdown.Mode
- Standaardwaarde is
Off
- Met deze optie geeft u het gedrag op nadat de app-server een SIGINT (CTRL + C) ontvangt.
- Als dit is ingesteld op
WaitForClientsClose
, in plaats van de server onmiddellijk te stoppen, verwijderen we deze uit de Azure SignalR-service om te voorkomen dat nieuwe clientverbindingen aan deze server worden toegewezen. - Als dit is ingesteld op
MigrateClients
, proberen we clientverbindingen naar een andere geldige server te migreren. De migratie wordt pas geactiveerd nadat een bericht is bezorgd.OnConnected
enOnDisconnected
worden geactiveerd wanneer verbindingen worden gemigreerd in/uit.IConnectionMigrationFeature
kan u helpen bepalen of de verbinding wordt gemigreerd in/uit.- Bekijk onze voorbeeldcodes voor gedetailleerd gebruik.
GracefulShutdown.Timeout
- Standaardwaarde is
30 seconds
- Met deze optie geeft u de langste tijd op waarin wordt gewacht totdat clients worden gesloten/gemigreerd.
ServiceScaleTimeout
- Standaardwaarde is
5 minutes
- Met deze optie wordt de langste tijd opgegeven voor het wachten op service-eindpunten voor dynamisch schalen, die minimaal van invloed zijn op onlineclients. Normaal gesproken kan de dynamische schaal tussen één app-server en een service-eindpunt binnen enkele seconden worden voltooid, terwijl u overweegt of u meerdere app-servers en meerdere service-eindpunten met netwerk-jitter hebt en clientstabiliteit wilt garanderen, kunt u deze waarde dienovereenkomstig configureren.
MaxPollIntervalInSeconds
- Standaardwaarde is
5
- Met deze optie definieert u het maximale poll-interval dat is toegestaan voor
LongPolling
verbindingen in Azure SignalR Service. Als de volgende poll-aanvraag niet binnenkomtMaxPollIntervalInSeconds
, schoont Azure SignalR Service de clientverbinding op. - De waarde is beperkt tot
[1, 300]
.
TransportTypeDetector
- Standaardwaarde: alle transporten zijn ingeschakeld.
- Met deze optie definieert u een functie voor het aanpassen van de transporten die clients kunnen gebruiken om HTTP-aanvragen te verzenden.
- Gebruik deze opties in plaats van
HttpConnectionDispatcherOptions.Transports
transporten te configureren.
AllowStatefulReconnects
- Standaardwaarde is
null
- Met deze optie kunt u stateful opnieuw verbinding maken voor alle hubs in- of uitschakelen.
- Als
null
, SDK leest hub-instellingen. - Als
true
Azure SignalR Service stateful opnieuw verbinding maakt in alle gedeclareerde hubs. En clients moeten stateful opnieuw verbinding maken aan de clientzijde. - Als
false
Azure SignalR Service stateful opnieuw verbinding in alle gedeclareerde hubs uitschakelt.
Voorbeeld
U kunt bovenstaande opties configureren, zoals de volgende voorbeeldcode.
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;
});
Voor de verouderde ASP.NET SignalR
Notitie
Als het uw eerste keer is dat u SignalR probeert, raden we u aan de ASP.NET Core SignalR te gebruiken, het is eenvoudiger, betrouwbaarder en gemakkelijker te gebruiken.
Installeer de SDK
Installeer SignalR Service SDK in uw ASP.NET project met Pakketbeheer Console:
Install-Package Microsoft.Azure.SignalR.AspNet
Gebruik in uw Startup
klasse SignalR Service SDK als het volgende codefragment, vervang MapSignalR()
dit door MapAzureSignalR({your_applicationName})
. Vervang {YourApplicationName}
deze door de naam van uw toepassing. Dit is de unieke naam om deze toepassing te onderscheiden met uw andere toepassingen. U kunt this.GetType().FullName
als de waarde gebruiken.
public void Configuration(IAppBuilder app)
{
app.MapAzureSignalR(this.GetType().FullName);
}
Verbindingsreeks configureren
Stel de verbindingsreeks in het web.config
bestand in op de connectionStrings
sectie:
<configuration>
<connectionStrings>
<add name="Azure:SignalR:ConnectionString" connectionString="Endpoint=...;AccessKey=..."/>
</connectionStrings>
...
</configuration>
Opties configureren
Er zijn enkele opties die u kunt aanpassen wanneer u de Azure SignalR Service SDK gebruikt.
ConnectionString
- De standaardwaarde is de
Azure:SignalR:ConnectionString
connectionString
ofappSetting
inweb.config
het bestand. - Deze kan opnieuw worden geconfigureerd, maar zorg ervoor dat de waarde niet in code is vastgelegd.
InitialHubServerConnectionCount
- De standaardwaarde is
5
. - Met deze optie bepaalt u het eerste aantal verbindingen per hub tussen de toepassingsserver en Azure SignalR Service. Bewaar deze meestal omdat de standaardwaarde voldoende is. Tijdens runtime kan de SDK nieuwe serververbindingen starten voor het afstemmen van prestaties of taakverdeling. Wanneer u een groot aantal clients hebt, kunt u het een groter aantal geven voor een betere doorvoer. Als u bijvoorbeeld in totaal 100.000 clients hebt, kan het aantal verbindingen worden verhoogd tot
10
of15
.
MaxHubServerConnectionCount
- De standaardwaarde is
null
. - Met deze optie bepaalt u het maximum aantal verbindingen dat per hub is toegestaan tussen toepassingsserver en Azure SignalR Service. Tijdens runtime kan de SDK nieuwe serververbindingen starten voor het afstemmen van prestaties of taakverdeling. Standaard wordt een nieuwe serververbinding gestart wanneer dat nodig is. Wanneer het maximum aantal toegestane serververbindingen is geconfigureerd, start de SDK geen nieuwe verbindingen wanneer het aantal serververbindingen de limiet bereikt.
ApplicationName
- De standaardwaarde is
null
. - Deze optie kan handig zijn als u hetzelfde Azure SignalR-exemplaar wilt delen voor verschillende app-servers met dezelfde hubnamen. Als deze niet is ingesteld, worden alle verbonden app-servers beschouwd als exemplaren van dezelfde toepassing.
ClaimProvider
- De standaardwaarde is
null
. - Met deze optie bepaalt u welke claims u aan de clientverbinding wilt koppelen.
Deze wordt gebruikt wanneer service-SDK toegangstoken genereert voor de client in de onderhandelingsaanvraag van de client.
Standaard worden alle claims van
IOwinContext.Authentication.User
de onderhandelde aanvraag gereserveerd. - Normaal gesproken moet u deze optie laten staan zoals is. Zorg ervoor dat u begrijpt wat er gebeurt voordat u deze kunt aanpassen.
AccessTokenLifetime
- De standaardwaarde is
1 hour
. - Met deze optie bepaalt u de geldige levensduur van het toegangstoken, dat door de Service SDK voor elke client wordt gegenereerd. Het toegangstoken wordt geretourneerd in het antwoord op de onderhandelingsaanvraag van de client.
- Wanneer
ServerSentEvent
ofLongPolling
wordt gebruikt als transport, wordt de clientverbinding gesloten vanwege een verificatiefout na de verlopen tijd. U kunt deze waarde verhogen om de verbinding met de client te voorkomen.
AccessTokenAlgorithm
- Standaardwaarde is
HS256
- Deze optie biedt de keuze bij het genereren van
SecurityAlgorithms
een toegangstoken. Nu wordenHS256
optionele waarden ondersteund enHS512
. Houd er rekening mee dat hetHS512
veiliger is, maar het gegenereerde token relatief langer is dan dat met behulp vanHS256
.
ServerStickyMode
- De standaardwaarde is
Disabled
. - Met deze optie geeft u de modus op voor serversticky. Wanneer de client wordt gerouteerd naar de server waarmee deze voor het eerst onderhandelt, noemen we deze server plakkerig.
- In gedistribueerde scenario's kunnen er meerdere app-servers zijn verbonden met één Azure SignalR-exemplaar. Zoals interne clientverbindingen uitlegt, onderhandelt de client eerst met de app-server en wordt vervolgens omgeleid naar Azure SignalR om de permanente verbinding tot stand te brengen. Azure SignalR zoekt vervolgens één app-server voor de client, zoals transportgegevens tussen client en server wordt uitgelegd.
- Wanneer
Disabled
wordt de client gerouteerd naar een willekeurige app-server. Over het algemeen hebben app-servers evenwichtige clientverbindingen met deze modus. Als uw scenario's worden uitgezonden of groep verzenden, gebruikt u deze standaardoptie voldoende. - Wanneer
Preferred
probeert Azure SignalR de app-server te vinden waarmee de client voor het eerst onderhandelt op een manier waarmee geen andere kosten of globale routering nodig is. Dit kan handig zijn wanneer uw scenario naar de verbinding wordt verzonden*. Verzenden naar verbinding kan betere prestaties en lagere latentie hebben wanneer de afzender en de ontvanger worden gerouteerd naar dezelfde app-server. - Wanneer
Required
probeert Azure SignalR altijd de app-server te vinden waarmee de client voor het eerst onderhandelt. Deze optie kan handig zijn wanneer bepaalde clientcontext wordt opgehaald uitnegotiate
de stap en wordt opgeslagen in het geheugen en vervolgens wordt gebruikt binnenHub
s. Deze optie kan echter prestatienadelen hebben, omdat Azure SignalR andere inspanningen moet ondernemen om deze specifieke app-server wereldwijd te vinden en om globaal routeringsverkeer tussen client en server te behouden.
- Wanneer
MaxPollIntervalInSeconds
- Standaardwaarde is
5
- Met deze optie definieert u de maximale inactieve tijd die is toegestaan voor inactieve verbindingen in Azure SignalR Service. In ASP.NET SignalR is het van toepassing op het transporttype voor lange polling of opnieuw verbinding maken. Als de volgende
/reconnect
of/poll
aanvraag niet binnenkomtMaxPollIntervalInSeconds
, schoont Azure SignalR Service de clientverbinding op. - De waarde is beperkt tot
[1, 300]
.
Voorbeeld
U kunt bovenstaande opties configureren, zoals de volgende voorbeeldcode.
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;
}));
Toepassingsserver uitschalen
Met Azure SignalR Service worden permanente verbindingen van de toepassingsserver offload, zodat u zich kunt richten op het implementeren van uw bedrijfslogica in hubklassen. U moet echter nog steeds toepassingsservers uitschalen voor betere prestaties bij het verwerken van enorme clientverbindingen. Hieronder volgen enkele tips voor het uitschalen van toepassingsservers.
- Meerdere toepassingsservers kunnen verbinding maken met hetzelfde Exemplaar van Azure SignalR Service.
- Als u hetzelfde Azure SignalR-exemplaar wilt delen voor verschillende toepassingen met dezelfde hubnamen, stelt u deze in met een andere optie ApplicationName . Als deze niet is ingesteld, worden alle verbonden app-servers beschouwd als exemplaren van dezelfde toepassing.
- Zolang de optie ApplicationName en de naam van de hubklasse hetzelfde zijn, worden verbindingen van verschillende toepassingsservers gegroepeerd in dezelfde hub.
- Elke clientverbinding wordt alleen gemaakt op een van de toepassingsservers en berichten van die client worden alleen naar dezelfde toepassingsserver verzonden. Als u wereldwijd toegang wilt krijgen tot clientgegevens (van alle toepassingsservers), moet u een gecentraliseerde opslag gebruiken om clientgegevens van alle toepassingsservers op te slaan.
Volgende stappen
In dit artikel leert u hoe u SignalR Service gebruikt in uw toepassingen. Raadpleeg de volgende artikelen voor meer informatie over SignalR Service.