Server-Sent Events (SSE) è una specifica che prevede una serie di API per aprire una connessione HTTP e poi inviare, su quest'ultima, delle notifiche push.
Tradizionalmente, per le richieste HTTP standard, la risposta arriva dal server web in maniera sincrona, con la chiusura del canale, non appena la stessa è stata processata.
Questo approccio differisce rispetto a HTTP streaming, dove la connessione del server è tenuta aperta e persistente rispetto al client. Questa caratteristica non è supportata da tutti i web server e richiede comunque la scrittura di un codice ad hoc lato server, che non chiuda la connessione, ma invii in maniera cadenzata le informazioni. Queste implementazioni sono disponibili per i framework più diffusi, come ASP.NET, Node.JS, PHP, Ruby.
Il server deve rispondere scrivendo nel corpo della risposta, che deve avere come MIME type il valore text/event-stream, usando questo formato:
data: contenuto del messaggio.
In questo caso, il codice per intercettare il messaggio è semplice:
var sse = new EventSource('mystreamingservice'); sse.onmessage = function (e) { var msg = e.data; // qui abbiamo il messaggio inviato };
Si chiama Server-Sent Events perché è possibile inviare anche messaggi al DOM, utilizzando questo formato:
event: goal data: Stephan El Shaarawy event: yellowcard data: Mathieu Flamini
In questo caso sarà possibile sottoscrivere gli eventi in questo modo:
var sse = new EventSource('mystreamingservice'); sse.addEventListener('goal', function (e) { addMessage("GOAL! Ha segnato " + e.data); }, false); sse.addEventListener('yellowcard', function (e) { addMessage("Cartellino giallo per " + e.data); }, false);
La connessione è aperta e chiusa in automatico, in caso di disconnessione, dal client, a meno che non venga inviato il codice HTTP 204 No Content, che prevede a chiuderla.
Questa API è stata creata per evitare di fare polling, come avviene utilizzando XMLHttpRequest o iframe, favorendo l'uso di un canale sempre aperto, che evita di sprecare anche batteria su dispositivi mobile.
Attualmente è in fase di RC (Release Candidate) e supportata da Chrome, FireFox, Safari e Opera nelle ultime versioni, ma non da IE <= 10.
Le specifiche complete sono disponibili su
http://www.w3.org/TR/eventsource/
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Limitare le richieste lato server con l'interactive routing di Blazor 8
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Ottenere un token di accesso per una GitHub App
Utilizzare un service principal per accedere a Azure Container Registry
Cambiare la chiave di partizionamento di Azure Cosmos DB
Filtering sulle colonne in una QuickGrid di Blazor
Creare un webhook in Azure DevOps
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare database e servizi con gli add-on di Container App
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Utilizzare Model as a Service su Microsoft Azure
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
I più letti di oggi
- Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
- Debug di app .NET tramite snapshot con Application Insight
- Utilizzare le Fullscreen API di HTML5 in IE11
- Proteggere l'accesso ad una Azure Web e API App tramite Google
- Utilizzare .NET Core con le Azure Function
- Effettuare il redirect da HTTP a HTTPS con la Azure CDN
- Creare un package MTS con uno script ASP
- Autenticazione con Minimal API di ASP.NET Core 6
- Routing HTTP con i proxy delle Azure Function
- Convidere una share di rete tra VM di Azure