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
Filtering sulle colonne in una QuickGrid di Blazor
Gestione dei nomi con le regole @layer in CSS
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Gestire la cancellazione di una richiesta in streaming da Blazor
Hosting di componenti WebAssembly in un'applicazione Blazor static
Migliorare l'organizzazione delle risorse con Azure Policy
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Utilizzare un service principal per accedere a Azure Container Registry
Miglioramenti nelle performance di Angular 16
Migliorare la sicurezza dei prompt con Azure AI Studio
Creare un'applicazione React e configurare Tailwind CSS
Criptare la comunicazione con mTLS in Azure Container Apps