HTML Server-Sent Events (SSE)
Önceki Web Workers JavaScript’i arka plan iş parçacığında çalıştırıp postMessage ile sayfayla konuşuyordu — yerel CPU, sunucu akışı yok. Bu ders off-thread hesabı bırakır ve SSE’yi tanıtır: sunucu HTTP üzerinden metin güncellemeleri push eder. Kapsam pratik — aç, dinle, tek yönlü push — Node akış sunucuları değil.
HTML kursunda neden SSE
Yeni başlayanlar özel soket protokolü olmadan canlı skor/log ister. SSE, HTTP üzerinden metin push için ilk yaygın API’dir. Workers’tan sonra bölünme farklıdır: sunucu akışa sahiptir; sayfa betiği EventSource ve DOM’a.
Doğrudan yanıt
1) new EventSource("/events"). 2) onmessage ve e.data. 3) DOM’u sayfada güncelleyin. 4) onerror. 5) Tek yönlü. 6) Dupleks için WebSockets; nadir için polling; yerel CPU için Workers.
📊 SSE vs WebSocket vs Worker
| Topic | SSE (this lesson) | WebSocket | Web Worker (prev) |
|---|---|---|---|
| Typical role | Server→browser text stream | Full duplex messages | Local off-thread compute |
| Browser entry | EventSource(url) | new WebSocket(url) | new Worker(url or Blob) |
| Direction | One-way (server push) | Two-way | Page ↔ worker (no server required) |
| Transport idea | HTTP text/event-stream | WS protocol | postMessage / onmessage |
| DOM updates | On the page script | On the page script | On the page script only |
| This course depth | Required (browser pattern) | Contrast only | Previous lesson |
| Not this lesson | Full backend stream servers | Chat product design | SharedWorker fleets |
Küçücük EventSource dinleme kalıbı
Yalnızca tarayıcı tarafı. /events gerçek bir SSE uç noktası olmalı; sunucusuz hata — yine API şeklini öğretir.
<pre id="out">Waiting for stream…</pre>
<script>
const out = document.getElementById("out");
const es = new EventSource("/events");
es.onmessage = function (e) {
out.textContent = "Last update: " + e.data;
};
es.onerror = function () {
out.textContent = "SSE error or closed (need a real /events stream)";
};
</script>
Dinleme çağrılarını okumak
- EventSource uzun HTTP akışı açar
- message’da onmessage
- e.data metin yükü
- Sayfa pre’ye yazar
- Workers’tan farklı: arka plan iş parçacığına postMessage yok
- Sunucusuz onerror beklenir
- Girişi küçük tutun
Akış satırlarını loga eklemek
Canlı UI’lar çoğu zaman her olayı ekler. Bu demo listedeki son satırları tutar.
<ul id="log"></ul>
<script>
const log = document.getElementById("log");
const es = new EventSource("/events");
es.onmessage = function (e) {
const li = document.createElement("li");
li.textContent = e.data;
log.appendChild(li);
while (log.children.length > 5) {
log.removeChild(log.firstChild);
}
};
es.onerror = function () {
if (!log.dataset.noted) {
log.dataset.noted = "1";
const li = document.createElement("li");
li.textContent = "Stream not available — wire a text/event-stream URL";
log.appendChild(li);
}
};
</script>
Log fikrini okumak
- Her onmessage bir li oluşturur
- Listeyi sınırlayın
- Hâlâ tek yönlü
- Web Worker değil
- Adlı olaylar var; message yeter
- Bitince es.close()
- Sonraki: XHTML
SSE, polling, soket veya worker seçmek
- HTTP üzerinden sık durum push: iyi SSE
- Nadir yenileme: polling yetebilir
- İki yönlü sohbet: WebSockets
- Ağır yerel döngü: Workers idi
- Kart sürüklemek: DnD idi
- Backend akış uç noktası kurmak: bu girişin ötesi
Alıştırma — açın, dinleyin, karşılaştırın
- Dinleme snippet’ini okuyun.
- text/event-stream’e bakın.
- Append-log’u okuyun.
- Cümle: Workers yerel; SSE sunucudan.
- Cümle: SSE tek yönlü; WebSockets dupleks.
- İsteğe bağlı gerçek URL.
- İleri: XHTML.
Kolay hatalar
- EventSource ile tarayıcı→sunucu beklemek
- Web Workers ile karıştırmak
- event-stream content-type unutmak
- Çok nadir güncellemeler için SSE
- onerror’u yok saymak
- Girişi tam backend streaming kursu saymak
- EventSource’u Worker/WebSocket ile karıştırmak
Özet
- SSE HTTP üzerinden sunucu→tarayıcı metin akıtır
- EventSource, onmessage/onerror; DOM sayfada
- Tek yönlü push; dupleks için WebSockets
- Workers yerel off-thread hesaptı; bu ders sunucu push
- Gerçek demolar text/event-stream ister
- Sonraki: XHTML
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek