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
Potenziare la ricerca su Cosmos DB con Full Text Search
Gestione degli stili CSS con le regole @layer
Cancellare una run di un workflow di GitHub
Utilizzare DeepSeek R1 con Azure AI
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Scrivere selettori CSS più semplici ed efficienti con :is()
Generare velocemente pagine CRUD in Blazor con QuickGrid
Utilizzare Azure Cosmos DB con i vettori
Selettore CSS :has() e i suoi casi d'uso avanzati
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Configurare lo startup di applicazioni server e client con .NET Aspire
Eseguire i worklow di GitHub su runner potenziati