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 query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Utilizzare WhenEach per processare i risultati di una lista di task
Gestione CSS in Blazor con .NET 9
Generare un hash con SHA-3 in .NET
La gestione della riconnessione al server di Blazor in .NET 9
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Creare una libreria CSS universale - Rotazione degli elementi
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Effettuare il refresh dei dati di una QuickGrid di Blazor
Potenziare la ricerca su Cosmos DB con Full Text Search
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Utilizzare il trigger SQL con le Azure Function