lilydocs
HTTP APIWebSocketConsumer
Temeller2 dk okuma

Controller ve namespace

Açık action ve hook tanımlarıyla exact route’lar oluşturun; controller metadata’sının hangi aşamaya uygulandığını öğrenin.

Bir controller bir namespace'e bağlı action'ları toplar. Namespace bağlantı başında seçilir; mesaj event'i bu namespace içindeki exact route'u çağırır.

Kanonik controller#

#[derive(WebSocketController)], #[namespace("hello")], fallible WebSocketControllerTrait::new ve #[websocket_controller] impl birlikte kullanılır. İlk uygulamadaki tam dosya bu şablonu gösterir.

Controller impl parçası
#[websocket_controller]
impl HelloController {
    #[message("ping")]
    async fn ping(&self) -> Result<Ack<&'static str>, WebSocketActionError> {
        Ok(Ack::new("pong"))
    }
}

Bu parçayı mevcut macro impl'e action olarak ekleyin; örnekteki import'ları koruyun. Gelen event hello:ping ve ACK için bir ack_id taşımalıdır. Yardımcı metodları ayrı sıradan impl bloğuna koyun. Macro altındaki action'ları isimden otomatik keşfediliyor gibi düşünmeyin; #[message(...)] açıkça yazılır.

Route kuralları#

Namespace en çok 128 ASCII byte'tır. Namespace ve action harf, rakam, -, _, . içerir. Action token'ı en çok 256 byte olsa da birleşik namespace:event en çok 256 byte olmalıdır. Büyük/küçük harf duyarlıdır; hello:Greet başka bir route'tur. / wildcard anlamına gelmez.

Aynı namespace veya action çakışmaları build'i durdurur. Controller başına en fazla bir connected ve bir disconnected hook'u tanımlanabilir.

Metadata yerleşimi#

Metadata Controller Action Lifecycle hook
Handshake / connection middleware Evet Hayır Hayır
Message middleware / guard Mesaj planının başlangıcı Yerel ek politika Hayır
Frame codec Namespace default'u Hayır Hayır
Payload codec Mesaj default'u Override Hayır
Timeout Mesaj default'u Override Hook'a özel bağımsız süre
AsyncAPI Dokümantasyon metadata'sı Dokümantasyon metadata'sı Mesaj operasyonu gibi yorumlanmaz

Kayıt örnekleri middleware, guard, codec ve AsyncAPI sayfalarında yer alır. Aynı concrete tipi kalıtımla gelen bir planda tekrar yazmak duplicate hatası oluşturabilir.

Controller’ın ömrü#

Constructor uygulama başına bir kez çalışır. Link sırasında kayıt bulunması, process genelinde tek canlı controller instance'ı olduğu anlamına gelmez; ayrı WsApp örnekleri ayrı instance üretir.

Controller alanlarında paylaşılan Singleton servisleri tutun. Mesaj Scoped servislerini Service<T> ile action'da veya aktif exchange üzerinden çözün. Mutable alanlar varsa birden fazla bağlantının aynı controller'a erişeceğini hesaba katın; bağlantı başına sıralı mesaj işleme, bütün controller çağrılarının tek sıra olduğu anlamına gelmez.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod