lilydocs
HTTP APIWebSocketConsumer
Temeller2 dk okuma

Uygulama yaşam döngüsü

Build, start ve close adımlarını; uygulamanın hangi kaynaklara sahip olduğunu öğrenin.

Lily’de uygulama kurulumu ve sunucunun çalışması ayrı adımlardır. Bu ayrım, başlangıç hatalarının erken yakalanmasını ve kapanışın kaynak sahipliğiyle birlikte yönetilmesini sağlar.

Build: uygulamayı hazırlama#

build().await, config’i yükler, DI container’ını kurar, Singleton servisleri başlatır, controller ve politikaları oluşturur. Route ve politika hataları bu aşamada reddedilir. Başarılı build henüz bir listener açmış değildir.

Async başlangıç fonksiyonu içinde
let app = AppBuilder::new("127.0.0.1:8080")
    .tls_disabled()
    .build().await?;

// Uygulama hazır. Henüz istek kabul edilmiyor.
app.start().await?;

Başlangıç başarısız olursa Lily kendisine ait oluşturulmuş kaynakları temizler. Controller, middleware ve guard constructor’ları uygulama kurulurken çalışır; istek başına yeniden çağrılmaz.

Start: sunucuyu çalıştırma#

start().await listener’ı açar, yönetilen background servislerini başlatır ve platform sinyallerini gözler. Başlatılmış bir App ikinci kez başlatılamaz.

Kapanış sinyalinin sahibi üst uygulamaysa start_with_cancellation(token) kullanın. Buradaki CancellationToken uygulamanın sahip olduğu token’dır; bir handler’a gelen salt okunur ExecutionCancellation ile aynı arayüz değildir.

Close: kapanışı bekleme#

App clone edilerek ayrı bir kapanış handle’ı tutulabilir. close().await yeni işi durdurur ve yönetilen kaynakların kapanış sonucunu bekler. Başlatılmamış bir uygulama da kapatılabilir:

Build sonrası başlatmadan kapatma
let app = AppBuilder::new("127.0.0.1:8080")
    .tls_disabled()
    .build().await?;
app.close().await?;

Tekrarlı veya eşzamanlı close çağrıları ilk kapanışın deadline’ını ve sonucunu paylaşır. Her çağrı yeni bir kapanış bütçesi açmaz.

Kaynakların kapanış sırası#

  1. Yeni işin kabulü durdurulur; devam eden yönetilen işler sonlandırılır.
  2. İstek kaynakları ve request scope’ları temizlenir.
  3. Uygulamaya ait DI servisleri kapatılır.
  4. Uygulamaya ait telemetry sağlayıcıları flush edilip kapatılır.

Bu adımlar koordineli yürür. Bir timeout veya abort çağrısı tek başına bağlı işin gerçekten sonlandığını kanıtlamaz. Cancellation ve shutdown sayfası bu sınırları açıklar.

Sahipliğin sınırı#

Kaynak Sahibi
Varsayılan App container’ı Lily HTTP uygulaması
Request-scoped servisler İlgili request scope
add_background_service ile kayıtlı worker HTTP host
.container(...) ile verilen container Onu oluşturan dış uygulama
Dış tracing runtime’ı Onu kuran uygulama
Uygulamanın kendi tokio::spawn işi Uygulama kodu

Aynı container’a en fazla bir HTTP lifecycle bağlanabilir. Controller, middleware ve guard için ayrı async dispose hook’u yoktur. Temizlenmesi gereken kaynakları ServiceTrait uygulayan DI servislerinde tutun.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod