Elementi interni del Servizio Azure SignalR

Il servizio Azure SignalR è basato sul framework ASP.NET Core SignalR. Supporta anche ASP.NET SignalR tramite il reimplementing del protocollo dati di ASP.NET SignalR oltre al framework ASP.NET Core.

È possibile eseguire facilmente la migrazione di un ASP.NET Core SignalR locale o di un'applicazione SignalR ASP.NET per lavorare con Servizio SignalR, modificando alcune righe di codice.

Il diagramma descrive l'architettura tipica quando si usa il Servizio SignalR con il server applicazioni.

Vengono illustrate anche le differenze rispetto all'applicazione ASP.NET Core SignalR self-hosted.

Architecture

Connessioni server applicazioni

Un ASP.NET server applicazioni Core SignalR self-hosted è in ascolto e connette direttamente i client.

Con Servizio SignalR, il server applicazioni non accetta più connessioni client persistenti, ma:

  1. Un endpoint negotiate viene esposto da Azure SignalR Service SDK per ogni hub.
  2. L'endpoint risponde alle richieste di negoziazione client e reindirizza i client a Servizio SignalR.
  3. I client si connettono a Servizio SignalR.

Per altre informazioni, vedere Connessioni client.

Dopo l'avvio del server applicazioni:

  • Per ASP.NET Core SignalR: Servizio Azure SignalR SDK apre cinque connessioni WebSocket per hub a Servizio SignalR.
  • Per ASP.NET SignalR: Servizio Azure SignalR SDK apre cinque connessioni WebSocket per hub a Servizio SignalR e una per ogni connessione WebSocket dell'applicazione.

Il numero iniziale di connessioni è predefinito 5 ed è configurabile usando l'opzione InitialHubServerConnectionCount in Servizio SignalR SDK. Per altre informazioni, vedere Configurazione.

Mentre il server applicazioni è connesso al servizio SignalR, il servizio Azure SignalR può inviare messaggi di bilanciamento del carico al server. L'SDK avvia quindi nuove connessioni server al servizio per ottenere prestazioni migliori. I messaggi da e verso i client vengono multipli in queste connessioni.

Le connessioni server sono connesse in modo permanente alla Servizio SignalR. Se una connessione al server è disconnessa a causa di un problema di rete:

Connessioni client

Quando si usa la Servizio SignalR, i client si connettono al servizio anziché al server applicazioni. Esistono tre passaggi per stabilire connessioni persistenti tra il client e il Servizio SignalR.

  1. Un client invia una richiesta negoziata al server applicazioni.

  2. Il server applicazioni usa Servizio Azure SignalR SDK per restituire una risposta di reindirizzamento contenente l'URL Servizio SignalR e il token di accesso.

    • Per ASP.NET Core SignalR, una risposta di reindirizzamento tipica è simile alla seguente:
      {
          "url":"https://test.service.signalr.net/client/?hub=chat&...",
          "accessToken":"<a typical JWT token>"
      }
      
    • Per ASP.NET SignalR, una risposta di reindirizzamento tipica è simile alla seguente:
      {
          "ProtocolVersion":"2.0",
          "RedirectUrl":"https://test.service.signalr.net/aspnetclient",
          "AccessToken":"<a typical JWT token>"
      }
      
  3. Dopo che il client riceve la risposta di reindirizzamento, usa l'URL e il token di accesso per connettersi a Servizio SignalR.

Per altre informazioni su ASP.NET Core SignalR, vedere Protocolli di trasporto.

Trasmissione di dati tra client e server

Quando un client è connesso al Servizio SignalR, il runtime del servizio trova una connessione server per gestire il client.

  • Questo passaggio viene eseguito una sola volta ed è un mapping uno-a-uno tra il client e la connessione server.
  • Il mapping viene mantenuto nel servizio SignalR finché il client o il server si disconnette.

A questo punto, il server applicazioni riceve un evento con informazioni dal nuovo client. Una connessione logica al client viene creata nel server applicazioni. Viene stabilito il canale dati dal client al server applicazioni, tramite il servizio SignalR.

Servizio SignalR trasmette i dati dal client al server applicazioni di associazione. I dati del server applicazioni vengono inviati ai client mappati.

Servizio SignalR non salva o archivia i dati dei clienti, tutti i dati dei clienti ricevuti vengono trasmessi al server o ai client di destinazione in tempo reale.

Il Servizio Azure SignalR funge da livello di trasporto logico tra il server applicazioni e i client. Tutte le connessioni persistenti vengono scaricate sul servizio SignalR. Di conseguenza, il server applicazioni deve gestire solo la logica di business nella classe hub, senza doversi preoccupare delle connessioni client.

Passaggi successivi

Per altre informazioni sugli SDK di Azure SignalR, vedere: