5 个版本
使用旧的 Rust 2015
0.1.4 | 2019 年 10 月 12 日 |
---|---|
0.1.3 | 2018 年 4 月 17 日 |
0.1.2 | 2018 年 4 月 17 日 |
0.1.1 | 2018 年 3 月 25 日 |
0.1.0 | 2018 年 3 月 17 日 |
#153 在 WebSocket
17KB
342 行
phoenix-channels-rs
一个 Rust 库,提供连接到 Phoenix 通道的功能。
它旨在成为一个至少是生产级别的客户端,但是目前处于非常早期的开发阶段,因此应该被视为实验性的。
目前有两种使用此库的方式。第一种是一个高级线程客户端,第二种是一个低级发送/接收器。
通过客户端连接
通过客户端连接将返回一个包含 Client
结构体和处理的传入消息的 mpsc::Receiver
的元组。这允许在需要的情况下在单独的线程中接收消息。
使用 Client
的一个非常基本的连接示例
use std::thread;
extern crate phoenix_channels;
use phoenix_channels::client;
let url = "ws://127.0.0.1:4000/socket";
let token = "abcde12345";
let params = vec![("token", token)];
let (client, messages) = client::Client::new(url, params, None).unwrap();
thread::spawn(move || {
for message in messages {
println!("{:?}", message);
}
});
client.join("room:lobby").unwrap();
客户端本身将处理心跳以及将 serde json 结构体传递到消息迭代器结果所需的所有其他操作。然而,这是一个具有偏见的 Phoenix 客户端实现,并使用线程、互斥锁和通道来实现其易于使用的接口。这可能在需要更多控制的情况下并不理想。
通过发送/接收器连接
另一种方法是仅使用低级 Sender
和 Receiver
结构体,并自己处理线程和心跳。消息的处理仍然由处理,并且如 join
和 heartbeat
等方法仍然方便地存在于 Sender
结构体上(实际上,Client
库在底层使用这些方法)。
以下是如何使用 Sender
/Receiver
结构体的示例
use std::thread;
use std::time::Duration;
extern crate phoenix_channels;
use phoenix_channels::client;
let url = "ws://127.0.0.1:4000/socket";
let token = "abcde12345";
let params = vec![("token", token)];
let (mut sender, receiver) = client::connect(url, params, None).unwrap();
sender.join("room:lobby").unwrap();
// create a heartbeat thread
thread::spawn(move || {
loop {
sender.heartbeat().unwrap();
thread::sleep(Duration::from_secs(2));
}
});
for message in receiver {
println!("{:?}", message);
}
使用低级 API 需要更多工作,但它允许您完全控制线程和消息的发送和接收。
日志记录
高级和低级 API 都在底层使用 slog 进行结构化日志记录。要启用此功能,您可以通过指定 Some(logger)
在 connect
和 Client::new
中传递您的日志记录器,而当前示例指定的是 None
。
依赖关系
~7MB
~157K SLoC