9 个版本
0.2.4 | 2021 年 2 月 15 日 |
---|---|
0.2.3 |
|
0.1.2 | 2021 年 2 月 4 日 |
0.1.1 |
|
0.0.8 | 2021 年 2 月 4 日 |
#2 in #aio
每月 43 次下载
用于 twirl
51KB
771 行
connect-rs
此 Rust 包提供了一种简单的、无代理的消息队列抽象,用于异步网络流。它保证按顺序发送和接收消息,并支持 TCP 和 TLS 传输。
示例
// create a client connection to the server
let mut conn = Connection::tcp_client(ip_address).await?;
// construct a new message
let msg = String::from("Hello world!");
let envelope: ConnectDatagram = ConnectDatagram::new(65535, msg.into_bytes())?;
// send a message to the server
conn.writer().send(envelope).await?;
// wait for the echo-server to reply with an echo
if let Some(mut envelope) = conn.reader().next().await {
// take the message payload from the envelope
let data: Vec<u8> = envelope.take_data().unwrap();
// reconstruct the original message
let msg = String::from_utf8(data)?;
assert_eq!("Hello world!", msg.as_str());
}
除了 包文档 之外,请使用提供的 示例程序 作为包使用的实际参考。
为什么?
当构建网络应用程序时,开发者不应需要反复解决在字节流上可靠、有序地发送消息的问题。通过使用消息队列抽象,包用户可以关注核心应用程序逻辑,并将低级网络和消息队列保证留给孩子抽象。
Connect 提供了一个 ConnectionWriter
和 ConnectionReader
接口,用于在网络上并发发送和接收消息。每个用户提供的消息前都有一个 8 字节的头部,包含大小前缀(4 个字节)、版本标签(2 个字节)和接收者标签(2 个字节)。大小前缀和版本标签用于内部反序列化从网络连接接收的消息。接收者标签旨在让包用户识别消息接收者,尽管库将这一点留给用户的决定。
库用户必须将自定义消息序列化为字节(Vec<u8>
),在构造 ConnectDatagram
之前,然后将它传递给 ConnectionWriter
。因此,ConnectionReader
将返回包含消息有效负载的 ConnectDatagram
(Vec<u8>
)再次)给用户以反序列化。
要求在构造数据报文之前序列化数据可能会显得多余,但给了开发者使用他们选择的序列化格式的自由。这意味着库用户可以进行一些有趣的事情,例如
- 使用接收者标签来表示使用哪种序列化格式发送该消息
- 使用接收者标签来表示发送的消息类型
特性标志
tls
:启用使用tls传输功能
特性状态
特性 | 状态 |
---|---|
TCP 客户端 | ✓ |
TCP服务器 | ✓ |
TLS 客户端 | ✓ |
TLS服务器 | ✓ |
SCTP客户端 | |
SCTP服务器 | |
DTLS-SCTP客户端 | |
DTLS-SCTP服务器 |
贡献
这个crate乐于接受贡献。请不要犹豫,打开问题或PR。
依赖项
~6–18MB
~269K SLoC