#tcp-stream #tcp #async #async-io #messages #prefix #send

nightly tobytcp

一个用于通过tcp流发送消息的小型库

6个版本 (重大更改)

0.13.0 2019年6月24日
0.12.0 2019年4月13日
0.11.0 2018年7月15日
0.10.1 2018年5月11日
0.8.0 2017年8月13日

#876异步

每月下载量35

自定义许可证

13KB
151

tobytcp

TobyTcp是一个协议,它允许使用原始tcp流进行双向消息通信。它使用长度前缀来划分消息。此库提供编码/解码该消息前缀的方法,同时也提供async发送和接收方法。

注意:可能已准备好用于生产。请参阅下面的免责声明部分。

文档

编写

请参阅/examples和单元测试来编译示例!

let prefix = protocol::tobytcp_prefix(data.len());

stream.write_all(&prefix)?;
stream.write_all(&data)?;

// OR use the send method in lib, which does almost exactly ^
send(&mut data, &mut stream).await?;

阅读

请参阅/examples和单元测试来编译示例!

let mut len_buf = [0; 8];
stream.read_exact(&mut len_buf)?;
let length = protocol::tobytcp_len(len_buf);

let mut msg_buf = [0; length as usize];
stream.read_exact(&mut msg_buf)?; // Done, we have received the message into msg_buf

// OR use the receive method in lib which does almost exactly ^
let data = receive(&mut buf, &mut stream).await?;;

TobyTcp协议

TobyTcp协议使用长度前缀进行消息划分

规范

消息必须以八个(8)字节为前缀,总共有64位。每个消息的这8字节/64位段必须包含发送消息中存在的字节数(不包括用于描述大小的8个字节)。长度前缀必须是big-endian。

示例

您可以使用protocol模块来检索前缀,它具有您数据的长度。

以下是一个编码消息的示例。该消息有18字节的数据,最后发送了18 + 8 = 26字节,其中前8字节代表长度。

00 00 00 00 00 00 00 12 74 6f 62 79 20 69 73 20 61 20 67 6f 6f 64 20 64 6f 67

还可以查看protocol测试,以了解预期内容!

免责声明

  • 此库提供不适用于稳定Rust(请参阅areweasyncyet!)的async方法,这对于考虑此1.0版本的我是一个大障碍。
    • 我可以将async方法放在一个'功能'之后,但我不确定如何做,而且没有人使用这个...
  • 在32位机器上未进行测试,不确定是否可行!

许可证

伊利诺伊大学/NCSA(国家超级计算应用中心)开源许可证

参阅LICENSE文件。这是一个类似Apache-2.0的宽松开源许可。

依赖项

~1.5MB
~28K SLoC