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 |
|
#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