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 网络编程

Download history 66/week @ 2024-03-28 10/week @ 2024-04-04 2/week @ 2024-04-11 5/week @ 2024-04-18 1/week @ 2024-06-27 60/week @ 2024-07-04

每月61次下载
用于 kwap

MIT/Apache

94KB
1.5K SLoC

crates.io docs.rs Maintenance

kwap-msg

CoAP消息的低级表示。

kwap_msg中最显著的项目是Message;一个与实际字节布局非常接近的CoAP消息。

分配

CoAP消息有一些属性,其大小是动态的

  • 消息有效载荷(在http术语中:请求/响应正文)
  • 选项的数量(在http术语中:标题)
  • 选项的值(在http术语中:标题值)

Message不需要分配器,并且对其内部用于存储这些值的数据结构没有任何意见。

它通过对其所需的集合进行泛型化来解决此问题,并使用Collection特质来捕获其关于什么使集合有用的想法。

这意味着您可以使用提供的实现(对于Vectinyvec::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快得多。

基准测试

序列化为字节

**点击展开图表**

chart

从字节反序列化

**点击展开图表**

chart

许可

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,将按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~4–5.5MB
~108K SLoC