Ana içeriğe geç

Server-Sent Events

Okunuşu
sörvır sent ivents
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/server-sent-events

Kısaca

Server-Sent Events, sunucunun tarayıcıya tek bir uzun ömürlü HTTP bağlantısı üzerinden sürekli metin güncellemeleri göndermesini sağlayan web standardıdır.

Server-Sent Events nedir?

Server-Sent Events ya da SSE, bir web sayfasına sunucudan gelen tek yönlü bir kanal sağlar: tarayıcı bağlantıyı bir kez açar, sunucu onu açık tutar ve bildirecek bir şeyi olduğunda yeni bir mesaj gönderir. SSE, tarayıcılara EventSource API'siyle yerleşik olarak gelir ve sıradan HTTP üzerinde çalışır; bu yüzden özel bir kurulum gerekmeden çoğu proxy'den, load balancer'dan ve güvenlik duvarından geçer.

Sunucu text/event-stream içerik tipiyle yanıt verir ve mesajları basit bir metin biçiminde yazar: data: ile başlayan satırlar, adlandırılmış bir olay tipi için isteğe bağlı event: ve mesaj kimliği için id:; her mesajı boş bir satır bitirir. Bağlantı koparsa tarayıcı otomatik olarak yeniden bağlanır ve Last-Event-ID başlığını gönderir; böylece sunucu kaldığı yerden devam edebilir. HTTP/1.1 üzerinde tarayıcılar site başına yalnızca yaklaşık altı açık bağlantıya izin verir; bu, çok sayıda sekmede sorun olabilir, ancak HTTP/2 ve HTTP/3 üzerinde birçok akış tek bir bağlantıyı paylaşır.

SSE, canlı bir haber bandına abone olmak gibidir: bir kez abone olursunuz ve başlıklar gelmeye devam eder, ancak aynı kanaldan karşılık veremezsiniz. Bildirimler, canlı panolar, hisse fiyatları, derleme ve dağıtım logları, ilerleme çubukları ve metnin model ürettikçe kelime kelime göründüğü LLM yanıt akışları için doğal bir uyumdur. İstemcinin veri göndermesi gerektiğinde akışın yanında sıradan HTTP istekleri kullanır.

SSE sıklıkla WebSocket ve long polling ile karşılaştırılır. WebSocket, her iki tarafın istediği zaman mesaj gönderebildiği ayrı, iki yönlü bir protokoldür; sohbet, çok oyunculu oyunlar ve ortak düzenleme için uygundur ancak daha fazla altyapı desteği gerektirir. Long polling, sunucunun veri gelene kadar açık tuttuğu tekrarlanan isteklerle push'u taklit eder ve istemcinin her yanıttan sonra yeniden bağlanması gerekir. SSE bu ikisinin arasında durur: tek yönlü sunucu push'u, yalnızca metin, düz HTTP üzerinde otomatik yeniden bağlanma. Bir sınırlama, yerel EventSource'un Authorization gibi özel başlıklar gönderememesidir; bu yüzden uygulamalar cookie'lere dayanır ya da fetch() tabanlı bir SSE istemcisi kullanır.

Önemli noktalar

  • SSE, mesajları sunucudan tarayıcıya tek bir uzun ömürlü HTTP yanıtı üzerinden akıtır.
  • Sunucu text/event-stream verisi gönderir, tarayıcılar onu EventSource API'siyle okur.
  • Tarayıcılar otomatik yeniden bağlanır ve Last-Event-ID başlığını kullanarak devam eder.
  • SSE tek yönlü ve yalnızca metindir; her iki taraf da mesaj göndermek zorundaysa WebSocket kullanın.
  • Bildirimler, canlı panolar ve LLM çıktısı akışı için yaygın olarak kullanılır.

Örnek

Bir Node.js SSE endpoint'i ve bir tarayıcı abonesijavascript
// Server (Node.js): keep the response open and write events
import http from "node:http";
http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/event-stream", "Cache-Control": "no-cache" });
  const timer = setInterval(() => {
    res.write("data: " + JSON.stringify({ time: Date.now() }) + "\n\n");
  }, 1000);
  req.on("close", () => clearInterval(timer));
}).listen(3000);

// Browser: subscribe and react to each message
const source = new EventSource("/events");
source.onmessage = (event) => console.log(JSON.parse(event.data).time);

Sık sorulan sorular

SSE, WebSocket'ten daha mı iyidir?

Hiçbiri genel olarak daha iyi değildir. SSE daha basittir ve otomatik yeniden bağlanmayla düz HTTP üzerinde çalışır; bu da yalnızca sunucunun veri göndermesi gerektiğinde onu ideal yapar. Sohbet veya oyunlarda olduğu gibi her iki taraf da sık mesaj gönderiyorsa WebSocket daha iyi seçimdir.

LLM API'leri neden Server-Sent Events kullanır?

Üretilen metni parça parça akıtırlar; böylece kullanıcılar tüm yanıtı beklemek yerine cevabın hemen belirdiğini görür. SSE bu tek yönlü akışa iyi uyar ve sıradan HTTP altyapısıyla çalışır.

SSE, HTTP/2 ile çalışır mı?

Evet, hatta orada daha iyi çalışır. HTTP/2 birçok akışı tek bir bağlantı üzerinden çoklar; bu da HTTP/1.1'deki site başına yaklaşık altı bağlantı sınırını kaldırır, ki bu sınır birçok sekmede SSE'yi engelleyebilirdi.

Sık karşılaştırılanlar

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar