27个版本 (5个破坏性)
0.6.1 | 2022年6月18日 |
---|---|
0.5.1 | 2022年5月20日 |
0.4.5 | 2022年1月29日 |
0.2.6 | 2021年12月31日 |
#1369 in 网络编程
每月61次下载
用于 kwap
94KB
1.5K SLoC
kwap-msg
CoAP消息的低级表示。
kwap_msg
中最显著的项目是Message
;一个与实际字节布局非常接近的CoAP消息。
分配
CoAP消息有一些属性,其大小是动态的
- 消息有效载荷(在http术语中:请求/响应正文)
- 选项的数量(在http术语中:标题)
- 选项的值(在http术语中:标题值)
Message
不需要分配器,并且对其内部用于存储这些值的数据结构没有任何意见。
它通过对其所需的集合进行泛型化来解决此问题,并使用Collection
特质来捕获其关于什么使集合有用的想法。
这意味着您可以使用提供的实现(对于Vec
或tinyvec::ArrayVec
)或提供您自己的集合(请参阅自定义集合示例)
//! Note: both of these type aliases are exported by `kwap_msg` for convenience.
use tinyvec::ArrayVec;
use kwap_msg::{Message, Opt};
// Message Payload byte buffer
// |
// | Option Value byte buffer
// | |
// | | Collection of options in the message
// vvvvvvv vvvvvvv vvvvvvvvvvvvvvvvv
type VecMessage = Message<Vec<u8>, Vec<u8>, Vec<Opt<Vec<u8>>>>;
// Used like: `ArrayVecMessage<1024, 256, 16>`; a message that can store a payload up to 1024 bytes, and up to 16 options each with up to a 256 byte value.
type ArrayVecMessage<
const PAYLOAD_SIZE: usize,
const OPT_SIZE: usize,
const NUM_OPTS: usize,
> = Message<
ArrayVec<[u8; PAYLOAD_SIZE]>,
ArrayVec<[u8; OPT_SIZE]>,
ArrayVec<[Opt<ArrayVec<[u8; OPT_SIZE]>>; NUM_OPTS]>,
>;
它可能看起来有点丑,但kwap
的核心目标是不依赖于平台和分配器。
性能
此crate使用criterion
来测量此crate中堆和堆外实现的性能以及coap_lite::Packet
。
一般来说,kwap_msg::VecMessage
的性能与coap_lite相同(±5%),并且两者都比kwap_msg::ArrayVecMessage
快得多。
基准测试
序列化为字节
**点击展开图表**
从字节反序列化
**点击展开图表**
许可
许可协议为以下之一
- Apache License,版本2.0(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~4–5.5MB
~108K SLoC