SignalR è un framework che permette la realizzazione di app web e mobile che siano in grado di comunicare realtime tra di loro o con un backend. Astrae dal protocollo di comunicazione, supportando Websocket, Server Event e Long polling, e dal sistema di serializzazione supportando JSON e MessagePack.
Con l'avvento di .NET Core è stato completamente riscritto e si accinge ad essere rilasciato, ma è già disponibile in preview con licenza Go Live. Il framework permette in pochi passi di mettere in comunicazione client e server con tecnologie diverse, ma allo stesso tempo nasconde una complessità e un carico di lavoro per il server che può diventare oneroso. Ogni connessione websocket va mantenuta sempre attiva e quando necessitiamo di inviare messaggi il server deve comunicare con ogni canale attivo. Non solo, in ottica di bilanciamento di carico, l'invio di un messaggio deve essere consegnato da parte di tutti i server coinvolti e tutti i client ad essi connessi.
In aiuto viene un nuovo servizio di nome Azure SignalR service che si fa carico di tutto questo, garantendo scalabilità e alta affidabilità, sgravandoci di tutta la sua gestione. Possiamo attivare il servizio direttamente dal portale, come siamo abituati a fare.
Viene creato così un endpoint ai quali i client si connettono per mandare e ricevere i messaggi, e allo stesso tempo un servizio REST che permette al nostro backend di indicare a quali connessioni, utenti e gruppi mandare i messaggi. Lato ASP.NET Core quindi, non dobbiamo far altro che creare uno o più hub, indicando, rispetto al solito, anche di utilizzare il servizio Azure, previa installazione del pacchetto NuGet Microsoft.Azure.SignalR.
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSignalR().AddAzureSignalR(); } public void Configure(IApplicationBuilder app) { app.UseAzureSignalR(routes => { routes.MapHub<Chat>("/chat"); }); }
Nell'appsettings.json è necessario inserire una nuova voce Azure:SignalR:ConnectionString con la stringa di connessione che recuperiamo dal portale, nella sezione dedicata.
Cambiano quindi i servizi registrati e il middleware, il quale risponde alla richiesta di negotiate da parte dei client, i quali rimangono inalterati, ma indica come endpoint di connessione quello di Azure, con una risposta simile a questa.
{"url":"https://ricciolo.service.signalr.net:5001/client/?hub=chat","accessToken":"...","availableTransports":[]}
Da questo momento in poi i client e il nostro backend sono connessi ad Azure: i primi mandano e ricevono messaggi tramite esso. Il secondo riceve i messaggi, gli elabora tramite le istanze di hub, che comunque vengono eseguiti sul nostro server, e le risposte inoltrate nuovamente a Azure, delegandone la consegna.
Per concludere, occorre parlare del pricing, il quale prevede un numero preciso di client e messaggi che ogni unit è in grado di veicolare. Sempre dal portale possiamo quindi decidere di scalare aumentando il numero di unit e la dimensione che per il momento è di una sola tipologia.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzazione dei block template in Angular 17
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Eseguire una query su SQL Azure tramite un workflow di GitHub
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Utilizzare la libreria Benchmark.NET per misurare le performance
Eseguire una GroupBy per entity in Entity Framework
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Copiare automaticamente le secret tra più repository di GitHub
Elencare le container images installate in un cluster di Kubernetes
Cambiare la chiave di partizionamento di Azure Cosmos DB
Utilizzare gli snapshot con Azure File shares
Semplificare il deployment di siti statici con Azure Static Web App
I più letti di oggi
- C# 4
- Spaziatura tra i caratteri in Silverlight 5
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Segui in tempo reale il TechEd 2004
- da oggi è possibile fare login velocemente con LinkedIn e Google. a questi si aggiunge il supporto già attivo per Facebook, Twitter, Microsoft Account, Windows Hello e OpenID, per darvi sempre più possibilità di accedere semplicemente alla nostra community! #aspitalia
- Migrare una service connection a workload identity federation in Azure DevOps
- Evitare postback multipli in un UpdatePanel