#protocols #tokio-codec #codec #line-based #send-receive

blather

一种健谈的基于行的协议

20个版本

0.10.1 2024年8月6日
0.10.0 2024年2月23日
0.9.0 2022年3月19日
0.8.0 2021年6月26日
0.1.4 2020年7月27日

562网络编程

Download history 15/week @ 2024-07-01 124/week @ 2024-08-05

124 每月下载量
用于 2 crates

0BSD 许可证

61KB
1K SLoC

blather

一个健谈的、某种程度上类似于HTTP的基于行的协议,作为tokio-util Codec实现。


lib.rs:

一个主要用于基于行的键值对协议的协议和通信库。

通信缓冲区

blather 定义了一些缓冲区,用于在其通信模块中发送和接收信息。

电报

最核心的通信缓冲区是 Telegram,它由一个 主题 和零个或多个键值对组成,其中每个键必须是唯一的。

use blather::Telegram;

let mut tg = Telegram::new_topic("AddUser").unwrap();

tg.add_param("Name", "Frank Foobar");
tg.add_param("Job", "Secret Agent");
tg.add_param("Age", "42");

assert_eq!(tg.get_topic(), Some("AddUser"));
assert_eq!(tg.get_str("Name").unwrap(), "Frank Foobar");
assert_eq!(tg.get_param::<u8>("Age").unwrap(), 42);

参数

这些是简单的键值对,可以看作是带有一些键名限制的HashMap

use blather::Params;

let mut params = Params::new();

params.add_param("Name", "Frank Foobar");
params.add_param("Job", "Secret Agent");
params.add_param("Age", "42");

assert_eq!(params.get_str("Name").unwrap(), "Frank Foobar");
assert_eq!(params.get_param::<u8>("Age").unwrap(), 42);

一组“参数”,由Params结构体表示,是一组键值对。它们看起来与Telegrams相似,因为Telegram使用Params缓冲区来实现其键值对。

通信

blather通过实现自己的Codec,使用tokio-util的Framed框架处理传输。它可以用来发送和接收crate支持的多种通信缓冲区。

依赖

~3–4.5MB
~71K SLoC