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
Migliorare la sicurezza dei prompt con Azure AI Studio
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Miglioramenti nell'accessibilità con Angular CDK
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Creare una libreria CSS universale: i bottoni
Gestire i dati con Azure Cosmos DB Data Explorer
Gestire la cancellazione di una richiesta in streaming da Blazor
Migrare una service connection a workload identity federation in Azure DevOps
Gestire gli accessi con Token su Azure Container Registry
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Criptare la comunicazione con mTLS in Azure Container Apps