Middle+
De ce au fost introduse evenimentele server-sent în HTML5?
sobes.tech AI
Răspuns de la AI
Pentru implementarea unui canal de comunicare unidirecțional între server și client. Serverul poate trimite date către client în orice moment după stabilirea conexiunii.
Caracteristici și avantaje cheie:
- Eficiență: Se utilizează o conexiune HTTP obișnuită, minimizând costurile comparativ cu polling-ul.
- Simplitate: API-ul de evenimente trimise de server (SSE) este mai simplu de utilizat decât WebSockets pentru comunicare unidirecțională.
- Reconectare automată: Browserul încearcă să se reconecteze automat în cazul întreruperii conexiunii.
- Suport pentru tipuri de date: Se suportă trimiterea de date text în formatul
text/event-stream. - Compatibilitate cu browserele: Este larg suportat de browsere moderne.
Aplicații:
- Actualizări în timp real ale fluxurilor de știri.
- Notificări despre evenimente (de exemplu, mesaje noi).
- Monitorizarea datelor în timp real (de exemplu, cotații bursiere).
- Progresul sarcinilor lungi.
Aceasta este o alternativă la polling-ul tradițional, unde clientul solicită periodic serverului dacă există actualizări. Spre deosebire de WebSockets, SSE este unidirecțional, ceea ce simplifică utilizarea lor atunci când datele sunt transmise doar de la server la client.
Exemplu pe partea client (JavaScript):
const eventSource = new EventSource('/events'); // URL pentru primirea evenimentelor de la server
eventSource.onmessage = function(event) {
// Procesarea datelor primite
console.log('Mesaj primit:', event.data);
};
eventSource.onerror = function(error) {
// Tratarea erorilor de conexiune
console.error('Eroare Server-Sent Events:', error);
};
eventSource.addEventListener('customEvent', function(event) {
// Procesarea evenimentului personalizat de tip 'customEvent'
console.log('Eveniment personalizat primit:', event.data);
});
Exemplu de format de date pe partea serverului:
event: customEvent
data: {"message": "Salut!"}
data: Mesaj text simplu
id: 123 // Identificatorul evenimentului, utilizat pentru reconectare automată
retry: 5000 // Întârzierea înainte de următoarea reconectare în milisecunde