3 个版本
0.1.2 | 2023年3月10日 |
---|---|
0.1.1 | 2023年3月9日 |
0.1.0 | 2022年10月1日 |
#99 in WebSocket
82KB
1.5K SLoC
Phoenix Channels
此包实现了 Rust 中的 Phoenix Channels (v2) 客户端。
状态
注意:虽然此客户端仍在开发中,但它已经具备足够的特性来支持许多用例。以下列出了已知缺失的特性
- 错误/断开重连
- 能够发送二进制消息,接收已实现
- 更全面的集成测试
- 添加对 v1 协议的支持
关于
此客户端是为了支持其在 LiveView Native 核心库 中的使用而构建的,该库也使用 Rust 实现。
客户端基于 tokio
实现,旨在用于 Rust 异步生态系统,尽管在非异步应用程序中使用客户端也是可能的,但前提是你仍然需要拉取 tokio
及其依赖项。
此客户端是新开发的,因此可能存在错误和缺失的特性。欢迎提交错误报告/功能请求,如果你发现任何问题,请在问题跟踪器上告诉我们!
用法
将其添加到你的依赖项中,如下所示
[dependencies]
phoenix_channels_client = { version = "0.1" }
在 .cargo/config.toml
中,开启我们需要的不稳定 tokio 特性,例如合作调度
[build]
rustflags = ["--cfg", "tokio_unstable"]
您还可以使用 features = ["nightly"]
启用夜间功能,目前这仅用于利用一些夜间 API 来操作切片,我们在解析时使用这些 API。
示例
use std::time::Duration;
use serde_json::json;
use phoenix_channels_client::{Config, Client};
#[tokio::main]
async fn main() {
// Prepare configuration for the client
let mut config = Config::new("ws://127.0.0.1:9002/socket/websocket").unwrap();
config.set("shared_secret", "supersecret");
// Create a client
let mut client = Client::new(config).unwrap();
// Connect the client
client.connect().await.unwrap();
// Join a channel with a timeout
let channel = client.join("channel:mytopic", Some(Duration::from_secs(15))).await.unwrap();
// Register an event handler, save the ref returned and use `off` to unsubscribe
channel.on("some_event", |channel, payload| {
println!("channel received {} from topic '{}'", payload, channel.topic());
}).await.unwrap();
// Send a message, waiting for a reply indefinitely
let result = channel.send("send_reply", json!({ "name": "foo", "message": "hi"})).await.unwrap();
// Send a message, waiting for a reply with an optional timeout
let result = channel.send_with_timeout("send_reply", json!({ "name": "foo", "message": "hello"}), Some(Duration::from_secs(5))).await.unwrap();
// Send a message, not waiting for a reply
let result = channel.send_noreply("send_noreply", json!({ "name": "foo", "message": "jeez"})).await.unwrap();
// Leave the channel
channel.leave().await;
}
贡献
欢迎贡献!在开始任何大型 PR 的工作之前,建议你先打开一个 issue 与维护者讨论工作,否则你可能会浪费时间去实现已经在进行中的功能!
许可证
Apache 2.0
依赖项
~6–18MB
~274K SLoC