Sobes.tech
Middle+

Perché sono stati introdotti gli eventi server-sent in HTML5?

sobes.tech AI

Risposta dell'AI

Per implementare un canale di comunicazione unidirezionale tra server e client. Il server può inviare dati al client in qualsiasi momento dopo aver stabilito la connessione.

Caratteristiche e vantaggi principali:

  • Efficienza: Si utilizza una normale connessione HTTP, minimizzando i costi rispetto al polling.
  • Semplicità: L'API degli eventi inviati dal server (SSE) è più semplice da usare rispetto ai WebSocket per comunicazioni unidirezionali.
  • Riconnessione automatica: Il browser tenta di riconnettersi automaticamente in caso di interruzione della connessione.
  • Supporto dei tipi di dati: Supporta l'invio di dati testuali in formato text/event-stream.
  • Compatibilità con i browser: Ampiamente supportato dai browser moderni.

Applicazioni:

  • Aggiornamento in tempo reale dei feed di notizie.
  • Notifiche di eventi (ad esempio, nuovi messaggi).
  • Monitoraggio dei dati in tempo reale (ad esempio, quotazioni di borsa).
  • Progresso di compiti lunghi.

Questa è un'alternativa al polling tradizionale, dove il client richiede periodicamente al server se ci sono aggiornamenti. A differenza dei WebSocket, SSE è unidirezionale, semplificando il loro utilizzo quando i dati vengono trasmessi solo dal server al client.

Esempio lato client (JavaScript):

const eventSource = new EventSource('/events'); // URL per ricevere eventi dal server

eventSource.onmessage = function(event) {
  // Elaborazione dei dati ricevuti
  console.log('Messaggio ricevuto:', event.data);
};

eventSource.onerror = function(error) {
  // Gestione degli errori di connessione
  console.error('Errore Server-Sent Events:', error);
};

eventSource.addEventListener('customEvent', function(event) {
  // Elaborazione dell'evento personalizzato di tipo 'customEvent'
  console.log('Evento personalizzato ricevuto:', event.data);
});

Esempio del formato dati lato server:

event: customEvent
data: {"message": "Ciao!"}

data: Messaggio di testo semplice

id: 123 // Identificatore dell'evento, usato per il riconnessione automatica

retry: 5000 // Ritardo prima della prossima riconnessione in millisecondi