2个不稳定版本
0.2.0 | 2022年11月8日 |
---|---|
0.1.0 | 2022年2月11日 |
#1960 in Web编程
每月22次下载
135KB
3K SLoC
Ably
Ably 是一个平台,它为实时同步数字体验提供动力。无论是在虚拟场馆参加活动、接收实时财务信息,还是监控实时汽车性能数据,消费者都期望将实时数字体验作为标准。Ably为每月80个国家的超过2.5亿台设备提供一系列API,以构建、扩展和交付强大的实时数字体验。像彭博社、HubSpot、Verizon和Hopin这样的组织依赖Ably的平台来减轻全球范围内业务关键实时数据同步日益增长复杂性。有关更多信息,请参阅Ably文档。
这是一个Ably REST API的Rust客户端库。它目前不包含任何实时功能。
注意:此SDK是开发者预览版,不适合生产环境。
安装
将ably
和tokio
包添加到您的Cargo.toml
[dependencies]
ably = "0.2.0"
tokio = { version = "1", features = ["full"] }
使用REST API
初始化客户端
使用Ably身份验证方法初始化客户端。
- 使用API密钥
let client = ably::Rest::from("xVLyHw.SmDuMg:************");
- 使用认证URL
let auth_url = "https://example.com/auth".parse()?;
let client = ably::ClientOptions::new().auth_url(auth_url).client()?;
发布消息
给定
let channel = client.channels.get("test");
- 发布字符串
let result = channel.publish().string("a string").send().await;
- 发布JSON对象
#[derive(Serialize)]
struct Point {
x: i32,
y: i32,
}
let point = Point { x: 3, y: 4 };
let result = channel.publish().json(point).send().await;
- 发布二进制数据
let data = vec![0x01, 0x02, 0x03, 0x04];
let result = channel.publish().binary(data).send().await;
检索历史记录
let mut pages = channel.history().pages();
while let Some(Ok(page)) = pages.next().await {
for msg in page.items().await? {
println!("message data = {:?}", msg.data);
}
}
检索存在状态
let mut pages = channel.presence.get().pages();
while let Some(Ok(page)) = pages.next().await {
for msg in page.items().await? {
println!("presence data = {:?}", msg.data);
}
}
检索存在状态历史记录
let mut pages = channel.presence.history().pages();
while let Some(Ok(page)) = pages.next().await {
for msg in page.items().await? {
println!("presence data = {:?}", msg.data);
}
}
加密消息数据
当提供128位或256位密钥给库时,所有消息的数据属性将自动使用该密钥进行加密和解密。密钥永远不会被发送到Ably。请参阅https://www.ably.com/documentation/realtime/encryption
// Initialize a channel with cipher parameters so that published messages
// get encrypted.
let cipher_key = ably::crypto::generate_random_key::<ably::crypto::Key256>();
let params = ably::rest::CipherParams::from(cipher_key);
let channel = client.channels.name("rust-example").cipher(params).get();
channel
.publish()
.name("name is not encrypted")
.string("sensitive data is encrypted")
.send()
.await;
请求令牌
let result = client
.auth
.request_token()
.client_id("[email protected]")
.capability(r#"{"example":["subscribe"]}"#)
.send()
.await;
检索应用程序统计信息
let mut pages = client.stats().pages();
while let Some(Ok(page)) = pages.next().await {
for stats in page.items().await? {
println!("stats = {:?}", stats);
}
}
依赖项
~9–25MB
~364K SLoC