Delen via


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.

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

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 of Azure__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:ConnectionStringconnectionString of appSetting in web.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 of 15.

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 op Hub.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 of LongPolling 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 worden HS256 optionele waarden ondersteund en HS512. Houd er rekening mee dat het HS512 veiliger is, maar het gegenereerde token relatief langer is dan dat met behulp van HS256.

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 Disabledwordt 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 Preferredprobeert 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 Requiredprobeert 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 uit negotiate de stap en wordt opgeslagen in het geheugen en vervolgens wordt gebruikt binnen Hubs. 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.

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 en OnDisconnected 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 binnenkomt MaxPollIntervalInSeconds, 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.

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:ConnectionStringconnectionString of appSetting in web.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 of 15.

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 of LongPolling 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 worden HS256 optionele waarden ondersteund en HS512. Houd er rekening mee dat het HS512 veiliger is, maar het gegenereerde token relatief langer is dan dat met behulp van HS256.

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 Disabledwordt 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 Preferredprobeert 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 Requiredprobeert 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 uit negotiate de stap en wordt opgeslagen in het geheugen en vervolgens wordt gebruikt binnen Hubs. 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.

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 binnenkomt MaxPollIntervalInSeconds, 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.