lilydocs
HTTP APIWebSocketConsumer
Yayın2 dk okuma

Principal hedefleme

Bir doğrulanmış kimliğin aynı namespace içindeki aktif bağlantılarına ve cihazlarına gönderim yapın.

Principal hedefleme, doğrulanmış subject'in aktif bağlantılarını seçer. Tek bir kullanıcının tarayıcı ve mobil bağlantılarına bildirim göndermek için uygundur. Kullanıcıya erişim yetkisi veya tenant ayrımı bu seçimden önce uygulama tarafından değerlendirilir.

Identity lifecycle’ı kurun#

WebSocketIdentityMiddleware bağlantıya doğrulanmış kimlik yayımladığında principal index'i ve expiry lifecycle'ı kurulur. Middleware yokken principal(...) aynı özelliği kendiliğinden açmaz; typed unavailable sonucu oluşur. Önce authentication kurulmalıdır.

Kimliği seçin#

Action içinde gönderim parçası
use lilyrs::websocket::PrincipalId;
let recipient = PrincipalId::try_new("user-42")?;
context.clients().principal(recipient)
    .send("chat:notification", "Yeni mesajınız var.").await?;

Parça chat namespace'inde ve bu hataları taşıyabilen bir async fonksiyon içindir; action'da hataları WebSocketActionError::internal gibi uygun dönüşümle ele alın. Gerçek recipient ID'sini DTO'dan alıyorsanız önce hedefe gönderim yetkisini doğrulayın.

PrincipalId non-empty, en fazla 256 UTF-8 byte, çevresinde whitespace ve içinde control karakteri olmayan exact değerdir. Namespace veya room token'ından farklı gramer kullanır. Kimliği normalize etme veya tenant prefix'i ekleme kararını uygulama verir.

Yenileme ve expiry#

Başarılı reauthenticate yeni revision'ı yayımlar ve index'i günceller. İşlenmekte olan mesajın Principal snapshot'ı değişmez. Expiry ilgili revision için geçerliyse index üyeliği kaldırılır ve yeni kabul sonlandırılır.

Connection locals refresh ile güncellenmediğinden yetki kararını eski local kopyaya bağlamayın. Aynı subject'i kullanan tenant'ları ayırmazsanız aynı namespace'te principal hedefleri ortak anahtara düşebilir; tenant modelini açıkça tasarlayın.

Dağıtık gönderim ve teslim#

Principal hedefleri de local/backplane dispatch yolunu kullanır. Index üyeliklerinin sahibi her node'un connection manager'ıdır. Redis global authoritative presence store değildir; offline cihaz için inbox veya replay sağlamaz.

send_with_receipt kuyruk ve publish kabulünü gösterir. Hedefte o an hiç bağlantı bulunmaması ile bir cihazın mesajı işlediğinin onayı farklıdır. Uygulama teslim/okundu bilgisi istiyorsa explicit mesaj kimliği, kalıcı store ve uygulama ACK akışı gerekir.

Bu sayfanın kaynakları v0.1.0

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

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod