9 个版本

0.2.4 2021 年 2 月 15 日
0.2.3 2021 年 2 月 15 日
0.1.2 2021 年 2 月 4 日
0.1.1 2018 年 6 月 19 日
0.0.8 2021 年 2 月 4 日

#2 in #aio

每月 43 次下载
用于 twirl

Apache-2.0

51KB
771

connect-rs

Crates.io Docs.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 提供了一个 ConnectionWriterConnectionReader 接口,用于在网络上并发发送和接收消息。每个用户提供的消息前都有一个 8 字节的头部,包含大小前缀(4 个字节)、版本标签(2 个字节)和接收者标签(2 个字节)。大小前缀和版本标签用于内部反序列化从网络连接接收的消息。接收者标签旨在让包用户识别消息接收者,尽管库将这一点留给用户的决定。

库用户必须将自定义消息序列化为字节(Vec<u8>),在构造 ConnectDatagram 之前,然后将它传递给 ConnectionWriter。因此,ConnectionReader 将返回包含消息有效负载的 ConnectDatagramVec<u8>)再次)给用户以反序列化。

要求在构造数据报文之前序列化数据可能会显得多余,但给了开发者使用他们选择的序列化格式的自由。这意味着库用户可以进行一些有趣的事情,例如

  • 使用接收者标签来表示使用哪种序列化格式发送该消息
  • 使用接收者标签来表示发送的消息类型

特性标志

  • tls:启用使用tls传输功能

特性状态

特性 状态
TCP 客户端
TCP服务器
TLS 客户端
TLS服务器
SCTP客户端
SCTP服务器
DTLS-SCTP客户端
DTLS-SCTP服务器

贡献

这个crate乐于接受贡献。请不要犹豫,打开问题或PR。

依赖项

~6–18MB
~269K SLoC