17 个不稳定版本 (3 个重大更改)
0.3.6 | 2023年5月2日 |
---|---|
0.3.5 | 2023年3月13日 |
0.3.4 | 2023年2月22日 |
0.3.0-alpha.2 |
|
0.0.1 | 2022年12月9日 |
#14 in #handshake
每月56次下载
48KB
1K SLoC
cometd-client
lib.rs
:
本包旨在为CometD协议创建客户端。
此项目正在开发中,版本之间可能变化很大。
目录
连接端点
客户端可以自定义端点基本路径
CometdClientBuilder::handshake_base_path
;CometdClientBuilder::subscribe_base_path
;CometdClientBuilder::connect_base_path
;CometdClientBuilder::disconnect_base_path
;
例如,要更改handshake基本路径并获取 http://[::1]:1025/notifications/node/0/handshake
,您可以这样做
use cometd_client::CometdClientBuilder;
let client = CometdClientBuilder::new(&"http://[::1]:1025/notifications/".parse()?)
.handshake_base_path("hand/")
.build()?;
其他端点也是如此。
身份验证
在服务器上进行身份验证有两种方式,通过 authorization
头和cookie。
通过授权头进行身份验证
要使用带有 authorization
头的访问令牌,您必须通过 CometdClientBuilder::access_token
设置它。此库提供两个默认结构: types::access_token::Bearer
和 types::access_token::Basic
。
use cometd_client::{CometdClientBuilder, types::access_token::{Bearer, Basic}};
// let access_token = Bearer::new("access-token");
let access_token = Basic::create("username", Some("optional password"))?;
let client = CometdClientBuilder::new(&"http://[::1]:1025/notifications/".parse()?)
.access_token(access_token)
.build()?;
但您可以自己创建用于 authorization
头的访问令牌
use core::fmt::{Formatter, Debug};
use cometd_client::types::AccessToken;
struct OAuth(String);
impl Debug for OAuth {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "OAuth(***)")
}
}
impl OAuth {
pub fn new(access_token: &str) -> Self {
Self(format!("OAuth {access_token}"))
}
}
impl AccessToken for OAuth {
fn get_authorization_token(&self) -> &str {
&self.0
}
}
通过cookie进行身份验证
如果您使用会话cookie进行身份验证(或其他原因),您可以通过 CometdClientBuilder::cookie
或 CometdClientBuilder::cookies
设置它(或它们)。
use cometd_client::CometdClientBuilder;
let client = CometdClientBuilder::new(&"http://[::1]:1025/notifications/".parse()?)
.cookie("cookie0-name", "cookie0-value")
.cookies([
("cookie1-name", "cookie1-value"),
("cookie2-name", "cookie2-value")
])
.build()?;
如何与客户端交互?
客户端使用MPMC通道发送消息和错误。通过CometdClientBuilder::build
启动任务,进行握手并开始等待消息。如果握手请求因服务器发送types::Reconnect::Handshake
或types::Reconnect::Retry
建议而失败,则客户端会尝试通过CometdClientBuilder::number_of_retries
次数重新进行。
握手成功后,任务开始监听来自服务器的消息。如果在监听期间出现types::Reconnect::Handshake
建议的错误,则客户端将尝试再次进行握手(见上文)。如果错误是types::Reconnect::Retry
建议,则它将尝试通过CometdClientBuilder::number_of_retries
次数重新进行。
要发送订阅命令,必须使用CometdClient::subscribe
。如果发生错误,它将按照与连接相同的方案进行重试(见上文)。
要获取事件通道接收器,请使用CometdClient::rx
。
use cometd_client::{types::CometdClientEvent, CometdClientBuilder};
let client = CometdClientBuilder::new(&"http://[::0]:1025/notifications/".parse()?)
.build()?;
let mut rx = client.rx();
tokio::spawn(async move {
while let Some(event) = rx.recv().await {
match event {
CometdClientEvent::Message(messages) => println!("got messages: `{messages:?}`."),
CometdClientEvent::Error(error) => eprintln!("got error: `{error:?}`."),
}
}
});
依赖项
~10–21MB
~303K SLoC