.NET 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗶𝗱𝗲 𝗘𝘃𝗲𝗻𝘁𝘀 𝗰𝗼𝗻 𝗠𝗼𝗻𝗴𝗼𝗗𝗕 𝗖𝗵𝗮𝗻𝗴𝗲 𝗦𝘁𝗿𝗲𝗮𝗺𝘀
Desideri aggiornamenti in tempo reale in ASP.NET Core. Potresti pensare subito ai WebSocket.
Esiste un modo più semplice per dashboard e feed. Puoi utilizzare MongoDB Change Streams e i Server-Sent Events (SSE).
Questa configurazione fornisce uno streaming unidirezionale dal server al client con pochissimo codice.
Come funziona:
- MongoDB Change Streams rilevano istantaneamente le modifiche al database.
- SSE invia tali modifiche al browser tramite una singola connessione HTTP.
- Eviti il polling costante, risparmiando risorse del server.
SSE è un'API nativa del browser. Funziona attraverso una risposta HTTP a lunga durata e supporta le riconnessioni automatiche. È perfetto per:
- Timeline in tempo reale
- Notifiche
- Feed di attività
- Dashboard di amministrazione
Nelle ASP.NET Core Minimal APIs, puoi implementarlo utilizzando TypedResults.ServerSentEvents.
Il flusso del codice segue questi passaggi:
- La tua app apre un cursore di change stream in MongoDB.
- MongoDB emette eventi quando i dati cambiano.
- La tua app mappa queste modifiche verso il client.
Un grande vantaggio è la possibilità di riprendere gli stream. MongoDB fornisce un resume token per ogni modifica. Puoi passare questo token tramite l'header Last-Event-ID. Quando un browser si riconnette, invia l'ultimo ID ricevuto. La tua app legge questo ID e dice a MongoDB di ripartire esattamente da dove si era interrotto.
Quando usare SSE rispetto a SignalR?
Usa SSE se:
- Hai bisogno solo di aggiornamenti dal server al client.
- Vuoi una configurazione leggera e basata su testo.
- Vuoi utilizzare le API native del browser.
Usa SignalR se:
- Hai bisogno di una comunicazione bidirezionale.
- Hai bisogno di funzionalità complesse come gruppi o hub.
- Hai bisogno della negoziazione automatica del trasporto (WebSockets, Long Polling).
Inizia con SSE per feed live semplici. Passa a SignalR solo quando la tua app richiede un'interazione più ricca.
Nota: MongoDB Change Streams richiedono un replica set o un cluster sharded. Non funzionano su un server standalone.
Source: https://dev.to/mongodb/net-server-side-events-with-mongodb-change-streams-5dfb
Optional learning community: https://t.me/GyaanSetuAi