ASP.NET SignalR è un ottimo framework che semplifica le problematiche inerenti alla comunicazione realtime, sfruttando websocket o tecniche di long polling. Sebbene in pochi passi possiamo creare una comunicazione bidirezionale, non dobbiamo dimenticare che stiamo impegnando maggiormente i server, poiché, a differenza delle normali richieste HTTP, manteniamo la connessione attiva e informazioni di stato sul web server.
E' facile quindi ritrovarci a dover scalare la nostra applicazione per non perdere in prestazioni, e il miglior modo per farlo è distribuendo le connessioni e i carichi di lavoro su più server. In questa situazione l'implementazione predefinita di SignalR, che lavora in memoria, non basta, perché le macchine devono comunicare tra di loro per inoltrare e per mandare i messaggi. Dobbiamo quindi cambiare la modalità con cui i messaggi server side vengono ricevuti e inoltrati, e la modularità di SignalR lo permette cambiando l'implementazione dell'interfaccia IMessageBus.
Una delle possibili implementazioni si basa sui Service Bus di Windows Azure e nello specifico sui Topic/Subscription che hanno lo scopo proprio di fornire un meccanismo di code affidabile e scalabile. Indipendentemente che l'applicazione web sia ospitata su Windows Azure o su altri server, possiamo utilizzare i Service Bus per poter scalare su infinite macchine, mantenendo prestazioni e affidabilità.
Per farlo dobbiamo seguire pochi semplici passi. Prima di tutto dobbiamo creare un nuovo namespace attraverso il portale http://manage.windowsazure.com
Possiamo poi entrare nel namespace e recuperare le informazioni di accesso per gestire le code premendo il pulsante Chiave di accesso. La stringa di connessione è l'elemento da configurare nell'applicazione ASP.NET.
Ora che abbiamo la stringa di connessione possiamo configurare la nostra applicazione ASP.NET. Dobbiamo prima di tutto installare il pacchetto NuGet di nome Microsoft.AspNet.SignalR.ServiceBus. Installato il pacchetto dobbiamo configurare SignalR ad usare Service Bus, specificando la stringa di connessione.
GlobalHost.DependencyResolver.UseServiceBus("Endpoint=sb://xxx.servicebus.windows.net/;SharedSecretIssuer=...", "Hubs"); // Normale registrazione degli hub routes.MapHubs();
Il primo parametro è la stringa di connessione, mentre il secondo è il prefisso che verrà dato ai topic che automaticamente SignalR crea e gestisce. Avviando la nostra applicazione noteremo il nuovo topic dal pannello di monitor di Service Bus e ciò significa che ora lo stiamo utilizzando e possiamo sfruttare più macchine per scalare.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire i worklow di GitHub su runner potenziati
Migliora le tue soluzioni ASP.NET Core con Azure OpenAI
Limitare le richieste lato server con l'interactive routing di Blazor 8
.NET Conference Italia 2024
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Gestire domini wildcard in Azure Container Apps
Assegnare un valore di default a un parametro di una lambda in C#
Migliorare l'organizzazione delle risorse con Azure Policy
Sostituire la GitHub Action di login su private registry
Ottimizzazione dei block template in Angular 17
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Miglioramenti nell'accessibilità con Angular CDK