Miért vezették be a server-sent eseményeket az HTML5-ben?
sobes.tech MI
Válasz az MI-től
A szerver által küldött események (SSE) bevezetésre kerültek az HTML5-ben, hogy egy irányban, valós idejű adatátvitelt biztosítsanak a szerverről a kliens felé HTTP-kapcsolaton keresztül. Ez lehetővé teszi, hogy a kliens folyamatos kérés küldése nélkül (polling) frissítéseket kapjon a szerverről. A fő előnyei más technológiákkal szemben:
- Egyszerűség: Egy normál HTTP-kapcsolatot használnak, ami megkönnyíti a meglévő webes technológiákkal és infrastruktúrával való integrációt.
- Hatékonyság: Lehetővé teszik a szerver számára, hogy akkor küldjön adatokat, amikor azok készen állnak, csökkentve a hálózati és szerver terhelést a gyakori pollinghoz képest.
- Automatikus újracsatlakozás: A böngésző automatikusan megpróbálja helyreállítani a kapcsolatot, ha az megszakad.
- Beépített feldolgozás: A
EventSourceAPI a böngészőben egyszerű felületet biztosít az eseményekkel és adatokkal való munkához.
Példa a kliens oldali használatra:
// Új EventSource objektum létrehozása, megadva a szerver URL-jét SSE-hez
const eventSource = new EventSource('/updates');
// A 'message' esemény kezelése - adatok fogadása a szerverről
eventSource.onmessage = function(event) {
// A kapott adatokat a konzolra írjuk
console.log('Új adatok a szervertől:', event.data);
};
// Kapcsolat hibáinak kezelése
eventSource.onerror = function(error) {
console.error('Hiba történt:', error);
};
A szerver válaszának MIME-típusnak text/event-stream-nek kell lennie, és a következőképpen kell formázni:
data: Ez az első adat sor\n
data: Ez a második adat sor\n\n
Minden üzenet két sortöréssel (\n\n) végződik. Minden adat sor data: -vel kezdődik. Lehetnek más mezők is, például event: az eseménytípus megadására vagy id: az üzenet azonosítójára.
A szerver által küldött események jó választás olyan szcenáriókhoz, ahol a szervernek folyamatos frissítéseket kell küldenie a kliensnek, például értesítések, hírcsatornák, részvényárfolyamok vagy hosszú futású folyamatok eredményei esetén. Egyszerűbbek megvalósítani, mint a WebSocket-ek, egyirányú kommunikációhoz.