Che cos'è ASP.NET Core SignalR?

Completato

Tutte le applicazioni connesse a Internet sono costituite da server e client. I client si affidano ai server per i dati e il rispettivo meccanismo principale per la ricezione di dati è costituito dalla creazione di richieste HTTP (Hypertext Transfer Protocol). Alcune applicazioni client richiedono dati che cambiano di frequente.

ASP.NET Core SignalR fornisce un'API per la creazione di chiamate RPC (Remote Procedure Call) da server a client. Le chiamate RPC richiamano funzioni sui client dal codice .NET Core lato server. Sono disponibili alcune piattaforme supportate, ognuna con SDK client specifico. Di conseguenza, il linguaggio di programmazione richiamato dalle chiamate RPC può variare.

Può risultare utile acquisire familiarità con la terminologia comune associata a SignalR. In questa unità si apprenderà quali componenti SignalR sono necessari in un'applicazione server e quelli nelle applicazioni client. Si otterranno inoltre informazioni sui diversi meccanismi di comunicazione duplex. SignalR incapsula più protocolli in tempo reale e astrae le complessità di ogni implementazione. Per altre informazioni, vedere la documentazione di ASP.NET Core SignalR.

I termini principali usati in SignalR sono trattati nelle sezioni seguenti.

Trasporti

SignalR supporta le tecniche seguenti, o trasporti, per la gestione delle comunicazioni in tempo reale:

  1. WebSocket
  2. SSE (Server-Sent Event)
  3. Polling prolungato

L'ordine in cui i trasporti sono elencati qui indica il rispettivo ordine di fallback normale. In altre parole, WebSocket è preferibile rispetto agli eventi inviati dal server e gli eventi inviati dal server sono preferibili rispetto al polling lungo, anche se è possibile usare uno di questi trasporti. SignalR sceglie automaticamente il metodo di trasporto migliore all'interno delle funzionalità del server e del client. Per altre informazioni, vedere la specifica ufficiale per i Protocolli di trasporto di SignalR.

Server

Il server è responsabile dell'esposizione di un endpoint di SignalR. L'endpoint è mappato a una sottoclasse Hub o Hub<T>. Il server può esistere in locale, in un provider di servizi cloud (ad esempio Azure) o con il Servizio Azure SignalR. Il server espone i metodi dell'hub, che possono essere chiamati dai client, e gli eventi che i client possono sottoscrivere. Queste sono considerate procedure remote.

Hub

In SignalR viene usato un hub per comunicare tra client e server. Un hub è una pipeline generale che consente a un client e a un server di chiamare metodi reciprocamente. A questo scopo, SignalR gestisce automaticamente la distribuzione tra i limiti del computer. È possibile pensare a un hub come a un proxy tra tutti i client connessi e il server.

Protocolli

Il protocollo SignalR è un protocollo per una chiamata RPC bidirezionale su qualsiasi trasporto basato su messaggio. Entrambe le parti nella connessione possono richiamare procedure sull'altra parte e le procedure possono restituire zero o più risultati oppure un errore. SignalR fornisce due protocolli hub predefiniti:

  • Un protocollo di testo basato su JSON, che è l'impostazione predefinita.
  • Un protocollo binario basato su MessagePack, che crea in genere messaggi più piccoli rispetto a JSON.

Per usare il protocollo MessagePack, è necessario che server e client acconsentano esplicitamente alla rispettiva configurazione e che server e client lo supportino. È disponibile un terzo protocollo hub, denominato BlazorPack, ma viene usato esclusivamente con applicazioni Blazor Server. Non può essere usato senza il modello di hosting di Blazor Server. Per altre informazioni, vedere la specifica ufficiale per il Protocollo hub SignalR.

Utenti

Un utente nel sistema funge da individuo, ma può anche far parte di un gruppo. I messaggi possono essere inviati ai gruppi e tutti i membri del gruppo ricevono una notifica. Un singolo utente può connettersi da più applicazioni client. Lo stesso utente, ad esempio, può usare un dispositivo mobile e un Web browser e ottenere aggiornamenti in tempo reale su entrambi contemporaneamente.

Gruppi

Un gruppo è costituito da una o più connessioni. Il server può creare gruppi, aggiungere connessioni a un gruppo e rimuovere connessioni da un gruppo. Un gruppo ha un nome specificato, che funge da identificatore univoco. I gruppi vengono usati come meccanismo di definizione di ambito per semplificare la determinazione dei destinatari dei messaggi. Ovvero, le funzionalità in tempo reale possono essere inviate solo agli utenti all'interno di un gruppo denominato.

Connessioni

Una connessione a un hub viene rappresentata da un identificatore univoco che è noto solo al server e al client. Esiste una singola connessione per ogni tipo di hub. Ogni client ha una connessione univoca al server, ovvero un singolo utente può essere rappresentato su più client, ma ogni connessione client ha il rispettivo identificatore.

Client

Il client è responsabile della creazione di una connessione all'endpoint del server tramite un oggetto HubConnection. La connessione all'hub è rappresentata in ogni piattaforma di destinazione:

Per altre informazioni, vedere Piattaforme supportate di ASP.NET Core SignalR.

Quando un'istanza di connessione all'hub viene avviata correttamente, i messaggi scorrono liberamente in entrambe le direzioni. Gli utenti possono comunicare notifiche al server e ricevere notifiche dal server. Un client è qualsiasi applicazione connessa, ad esempio un Web browser, un'app per dispositivi mobili o un'app desktop, tra le altre.