#coap-server #coap #server-client #networking #built #applications #embedded-nal-async

无std embedded-nal-coap

在嵌入式-nal-async基础上构建的CoAP服务器和客户端实现

3个版本

0.1.0-alpha.3 2024年8月16日
0.1.0-alpha.22024年1月18日
0.1.0-alpha.12023年11月14日

#1337嵌入式开发

Download history 142/week @ 2024-04-22 207/week @ 2024-04-29 114/week @ 2024-05-06 422/week @ 2024-05-13 291/week @ 2024-05-20 42/week @ 2024-05-27 28/week @ 2024-06-03 105/week @ 2024-06-10 118/week @ 2024-06-17 127/week @ 2024-06-24 270/week @ 2024-07-01 256/week @ 2024-07-08 124/week @ 2024-07-15 25/week @ 2024-07-29 173/week @ 2024-08-05

每月322 次下载
coap-message-demos 中使用

MIT/Apache

53KB
723

Maintenance

嵌入式-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::MinimalWritableMessagecoap_message::MutableWritableMessage特性相一致。

    这种限制使得这个crate不仅可以是no_std,而且不需要alloc

选择

CoAP的这个实现选择使用单个任务,因此任务中只分配一个缓冲区。当然,这里还可以选择其他方案,这些方案可能在不同crate中实现,或者以后进行修改(例如,如果发现更有效的实现使用不同的任务进行发送和接收,但使用单个缓冲区或至少1个大小得缓冲区池,该池被任务锁定)。

许可证:MIT OR Apache-2.0

依赖项

约3MB
约52K SLoC