Connection middleware
Bağlantı sonrası admit, opened ve closed adımlarına politika ve gözlem ekleyin.
WsConnectionMiddleware, başarılı HTTP Upgrade sonrasında çalışır. Bağlantının uygulama tarafından kabulü ve yayınlanması etrafındaki olayları gözlemler. Her mesajın etrafında çalışması gereken bir iş için message middleware seçin.
Üç callback#
| Callback | Zaman | Sinyal |
|---|---|---|
admit |
101 sonrası, manager'a yayımlamadan önce | ExecutionCancellation |
opened |
Bağlantı manager'a yayımlandıktan sonra | ExecutionCancellation |
closed |
Bağlantının kapanış cleanup'ında | CleanupCancellation |
101 sonrasında olduğunuz için admit hatasını HTTP 403 gibi yorumlamayın. Connection error/close akışı uygulanır. Pre-101 reddetme gerektiren doğrulama handshake veya identity katmanındadır.
Örneği kaydedin#
Handshake middleware sayfasındaki connection_policy.rs dosyası ConnectionAudit tipini de içerir. Yalnızca audit'i kullanmak için:
use crate::connection_policy::ConnectionAudit;
let builder = WsAppBuilder::default()
.connection_middleware::<ConnectionAudit>();İlk uygulamadaki facade import'una WsAppBuilder dahildir. Controller'a özel kullanım #[connection_middleware(ConnectionAudit)] biçimindedir. Descriptor MiddlewareKind::WebSocketConnection olmalıdır. Global ve controller kayıtlarında aynı tipi aynı effective planda tekrarlamayın.
Sıra ve cleanup uygunluğu#
Global kayıtlar controller kayıtlarından önce uygulanır. Cleanup, başarıyla girilen prefix için ters sırada yürür; başlamamış veya başarısız admission'ı tamamlanmış gibi varsaymayın. closed callback'i WsConnectionCloseCategory ile neden kategorisini alır ve kendi bağımsız cleanup sinyalini gözler.
Connection middleware closed ile controller disconnected farklı yükümlülüklerdir. İkincisinin uygunluğu başarılı connected dönüşüne bağlıdır; hook sayfasındaki kuralı middleware olaylarının yerine uygulamayın.
Kaynak ve süre sahipliği#
Middleware app başına bir kez oluşturulur. Bir connection-lived DI scope'u sağlamaz. Constructor'da paylaşılan Singleton servis kullanabilirsiniz; callback'te bir mesaj scope'u varmış gibi Scoped transaction saklamayın.
connection_middleware_timeout_secs, admit/opened invocation'larını ve aggregate closed zincirini sınırlar. Cleanup sırasında socket terminal durumda olabilir. Audit kaydı gibi işleri bounded ve idempotent tutun; canlı caller'a son bir mesajın teslimine bağlı cleanup kurmayın.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.