#channel #phoenix #messaging #pubsub #websocket-client

phoenix-channels

Phoenix channels 的 WebSocket 客户端库

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 日

#153WebSocket

MIT 许可证

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 客户端实现,并使用线程、互斥锁和通道来实现其易于使用的接口。这可能在需要更多控制的情况下并不理想。

通过发送/接收器连接

另一种方法是仅使用低级 SenderReceiver 结构体,并自己处理线程和心跳。消息的处理仍然由处理,并且如 joinheartbeat 等方法仍然方便地存在于 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)connectClient::new 中传递您的日志记录器,而当前示例指定的是 None

依赖关系

~7MB
~157K SLoC