lilydocs
HTTP APIWebSocketConsumer
Teknikler2 dk okuma

Server-Sent Events

Browser’a event akışı gönderin; backpressure ve yeniden bağlantı davranışını tasarlayın.

SSE, tek bir HTTP response üzerinden browser’a event göndermek için kullanılır. SseEvent event biçimini, SseResponse ise lazy response’u sağlar.

İlk event#

Manifestinize futures = "0.3" ekleyin. std::convert::Infallible ve facade’dan sse, SseEvent, SseResponse import edin. /files controller’ındaki action:

Controller action parçası
#[get("/events")]
async fn events(&self) -> Result<SseResponse, HttpApiError> {
    let event = SseEvent::new("export-ready")?
        .event("export")?
        .id("1")?;
    Ok(sse(futures::stream::iter([Ok::<_, Infallible>(event)])))
}
Event akışını gözleme
curl -N http://127.0.0.1:8080/files/events

Bu örnek export adlı, 1 ID’li tek event üretip tamamlanır. Tam controller örneği diğer streaming yollarını da içerir.

Sürekli event üretimi#

sse_channel(capacity) sınırlı bir kanal oluşturur. send backpressure uygular; try_send kanal doluysa bunu döndürür. closed ile tüketicinin kapanmasını izleyebilirsiniz. Kuyruk kapasitesini sınırsız büyütmek yerine producer’ın yavaş tüketiciye nasıl davranacağını belirleyin.

Yeniden bağlantı#

RequestExt::last_event_id istemcinin cursor bilgisini okur. Geçmiş event’leri saklama ve replay etme uygulamanın sorumluluğudur. Cursor okunması tek başına kayıpsız yeniden bağlanma garantisi vermez.

Keep-alive ve deadline#

Event data, event adı, ID ve retry alanları doğrulanır. Keep-alive/heartbeat seçimi bağlantıyı canlı tutmaya yardımcı olur; request deadline’ını yenilemez. SSE de transport timeout ve shutdown kurallarına tabidir.

Kendi tokio::spawn çağrınızla açtığınız producer otomatik olarak HTTP host’un yönettiği worker olmaz. Producer kaynak sahipliğini açık kurun veya background service modeli kullanın.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod