pub struct VersionedNegotiator { /* private fields */ }Expand description
版本感知的子协议协商器。
相比 SubProtocolRegistry,支持:
- 协议元数据(版本、优先级、描述)
- 按优先级排序选取(而非严格按客户端顺序)
- 协商统计跟踪
- 详细的协商结果(
NegotiationOutcome)
Implementations§
Source§impl VersionedNegotiator
impl VersionedNegotiator
Sourcepub fn register(&mut self, metadata: ProtocolMetadata)
pub fn register(&mut self, metadata: ProtocolMetadata)
注册一个带元数据的协议
Sourcepub fn register_simple(&mut self, name: &str, version: &str)
pub fn register_simple(&mut self, name: &str, version: &str)
便捷注册:仅指定名称与版本,优先级默认为 0
Sourcepub fn unregister(&mut self, header_value: &str) -> bool
pub fn unregister(&mut self, header_value: &str) -> bool
注销指定协议
Sourcepub fn stats(&self) -> NegotiationStats
pub fn stats(&self) -> NegotiationStats
获取协商统计快照
Sourcepub fn registered_protocols(&self) -> Vec<String>
pub fn registered_protocols(&self) -> Vec<String>
获取所有已注册协议的 header 值列表(按字母序排序)
Sourcepub fn protocols_by_priority(&self) -> Vec<&ProtocolMetadata>
pub fn protocols_by_priority(&self) -> Vec<&ProtocolMetadata>
按优先级降序返回已注册协议的元数据。 优先级相同时按 header_value 字母序排列。
Sourcepub fn negotiate(&mut self, client_protocols: &[String]) -> NegotiationOutcome
pub fn negotiate(&mut self, client_protocols: &[String]) -> NegotiationOutcome
执行协商:从客户端请求的协议列表中选取最佳匹配。
选取规则:
- 客户端列表为空 ->
NegotiationOutcome::NotRequested - 筛选客户端列表中服务端也支持的协议
- 从候选中按优先级降序选取第一个
- 无候选 ->
NegotiationOutcome::NoMatch
每次调用会更新协商统计。
Trait Implementations§
Auto Trait Implementations§
impl Freeze for VersionedNegotiator
impl RefUnwindSafe for VersionedNegotiator
impl Send for VersionedNegotiator
impl Sync for VersionedNegotiator
impl Unpin for VersionedNegotiator
impl UnsafeUnpin for VersionedNegotiator
impl UnwindSafe for VersionedNegotiator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more