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.
#[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.