3个版本
新 0.1.0-alpha.3 | 2024年8月16日 |
---|---|
0.1.0-alpha.2 | 2024年1月18日 |
0.1.0-alpha.1 | 2023年11月14日 |
#1337 在 嵌入式开发
每月322 次下载
在 coap-message-demos 中使用
53KB
723 行
嵌入式-nal-coap
基于[embedded_nal_async]的CoAP服务器和客户端实现。
使用和操作
此示例的使用方法将作为[coap-message-demos] crate的一部分提供。
-
使用一个具有
CONCURRENT_REQUESTS
常量的[CoAPShared],该常量表示应同时可服务的出站请求数量。 -
使用[CoAPShared::split()]将其分割为客户端和服务器部分。
-
使用客户端的[CoAPRuntimeClient::to()]方法创建一个coap_request::Stack,它可以用于发送CoAP请求并接收响应。(计划实现多个响应,例如来自观察,但尚未实现)。
包含用于构建请求的合适(尽管尚不成熟)构建块的[coap_request_implementations] crate。
-
将未连接的UDP套接字、低质量熵源(用于重传抖动等)和一个CoAP服务器应用程序传递给服务器的[CoAPRunner::run()]方法。
包含用于构建此类服务器应用程序的合适构建块的[coap_handler_implementations] crate(包括一些用于将单个资源的处理程序组合为从URI路径中选择子处理程序的处理程序)。
run函数返回的未来需要由执行器轮询;注意,它不是Send,并且某些执行器需要配置才能允许这样做。
注意事项
-
服务器不执行任何放大缓解(处理程序由于缺乏远程信息而无法执行);仅在可接受的环境中(例如,在封闭网络中)使用此功能。
将在未来的版本中缓解。
FIXME 仅提供3x缓冲区以供响应/当处理程序指示需要更多时,4.01 Echo?(处理程序可能对被丢弃表示不满;-处理程序可能需要关于此的指导)
-
此服务器不支持NSTART和PROBING_RATE,这是CoAP的基本流控制参数,使它适用于通用互联网应用程序。
将在未来的版本中解决这个问题。
FIXME 传递时间源
-
服务器不执行任何消息去重。因此,所有处理函数都必须是幂等的。
-
消息的创建尽可能减少复制,以符合[embedded_nal]的限制。对于可写消息,这意味着它们需要按照递增的CoAP选项号进行写入。这与已实现的coap_message::MinimalWritableMessage和coap_message::MutableWritableMessage特性相一致。
这种限制使得这个crate不仅可以是
no_std
,而且不需要alloc
。
选择
CoAP的这个实现选择使用单个任务,因此任务中只分配一个缓冲区。当然,这里还可以选择其他方案,这些方案可能在不同crate中实现,或者以后进行修改(例如,如果发现更有效的实现使用不同的任务进行发送和接收,但使用单个缓冲区或至少1个大小得缓冲区池,该池被任务锁定)。
许可证:MIT OR Apache-2.0
依赖项
约3MB
约52K SLoC