Sobes.tech
Middle

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 EventSource API 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.