Nello sviluppo web moderno, la necessità di aggiornare l'interfaccia utente in tempo reale è ormai uno standard. Storicamente, l'approccio più semplice (ma meno efficiente) è stato il HTTP Polling, in cui il client tempesta il server di richieste a intervalli regolari.
Questo approccio comporta un enorme spreco di risorse, latenza e un carico inutile sul server.
Mentre per comunicazioni bidirezionali complesse la scelta ideale ricade su SignalR (WebSockets), esiste uno spazio intermedio perfetto per flussi di dati unidirezionali (dal server al client): le Server-Sent Events (SSE). Con il rilascio di .NET 10, ASP.NET Core introduce finalmente un supporto nativo di prima classe che rende l'implementazione di SSE incredibilmente semplice e pulita.
Perché scegliere SSE invece del Polling (e di SignalR)?
Le Server-Sent Events si basano su una singola connessione HTTP standard che rimane aperta. Il server spinge i dati verso il client non appena sono disponibili, formattati secondo il tipo text/event-stream.
- Nessun Polling: Il client effettua una sola richiesta HTTP. Nessun ciclo infinito di richieste ogni $X$ secondi.
- Infrastruttura Standard: Funziona su HTTP/1.1 o HTTP/2, senza bisogno di aggiornamenti di protocollo (come richiesto dai WebSockets). Funziona nativamente con proxy, firewall e bilanciatori di carico.
- Riconnessione Automatica: Se la rete cade, il browser tenta automaticamente di riconnettersi tramite l'API nativa
EventSource, inviando l'ultimo ID ricevuto (Last-Event-ID) per evitare la perdita di dati. - Leggerezza: Rispetto a SignalR, non richiede librerie client pesanti o configurazioni complesse sul server.
La Svolta di .NET 10: Results.ServerSentEvents
Nelle versioni precedenti di .NET, per implementare SSE era necessario configurare manualmente gli header di HttpContext.Response, scrivere stringhe formattate nel body dello stream e gestire manualmente il flush del buffer e i token di cancellazione.
In .NET 10, tutto questo viene estratto grazie al nuovo metodo Results.ServerSentEvents (o TypedResults.ServerSentEvents) e alla struct nativa SseItem<T> inclusa nel namespace System.Net.ServerSentEvents. Il framework si occupa autonomamente di serializzare in JSON, gestire la formattazione dello stream e rispettare la cancellazione del client.
Esempio Pratico: Streaming di Aggiornamenti con .NET 10
Di seguito viene mostrato un esempio completo. Il backend simula un flusso continuo di dati meteo inviati al client ogni 2 secondi senza interruzioni.
1. Il Backend (.NET 10 Minimal API)
Assicurati di utilizzare l'SDK di .NET 10. Crea un endpoint che restituisce un IAsyncEnumerable integrato con SseItem<T>.
C#
2. Il Frontend (Vanilla JavaScript)
Sul lato client non serve alcuna libreria esterna. Sfruttiamo l'oggetto nativo EventSource messo a disposizione da tutti i browser moderni.
HTML
Conclusioni
Con .NET 10, le Server-Sent Events escono dall'ombra delle implementazioni custom per diventare un cittadino di prima classe in ASP.NET Core.
Se la tua applicazione ha bisogno esclusivamente di ricevere dati aggiornati dal server (come nel caso di dashboard, feed di notifiche, log in streaming o risposte progressive da modelli di Intelligenza Artificiale/LLM), SSE con TypedResults.ServerSentEvents è la soluzione architetturalmente più pulita, leggera ed efficiente a tua disposizione, mandando definitivamente in pensione il vecchio e pesante meccanismo del polling.
Commenti (0)
Nessun commento ancora.