首页 > 解决方案 > 是否可以通过 CoAP 传输文件?

问题描述

最近,我在做一个项目,我正在尝试将一个 json 文件传输到 CoAP 服务器。我在键:值对中放置了一些随机值,例如:

{
    key1: value1,
    key2: [value21, value22, value23]
}

问题:

更新:

实际文件大小约为 152.8 kB。

标签: httpcoap

解决方案


对于第一次尝试,您可以尝试 eclipse/californium 的“simple-fileserver-example”。

cf-simple-fileserver

支持读取 (GET) 并为此使用选项块 2。

如果你更深入并离开实验室,RFC7959 blockwise可能会面临几个问题。

  1. coap 通常假设端点由它们的 ip 地址(和端口)标识。尽管逐块传输可能会持续更长时间,但这种假设可能会被打破。如果客户端面临这样的地址更改,块选项 2 (GET) 可能会起作用,但对于块选项 1 (PUT),则需要特殊准备。

  2. 虽然这种逐块传输往往会持续更长时间,但由于临时传输问题,它可能会暂停。这需要一个“恢复或失败”的策略。这里 GET 也比 PUT 容易得多。

  3. 崩溃时的基本传输问题。根据我的经验,blockwise 有很多块,并且在短时间内使用了很多 MID。如果客户端在启动时崩溃并选择了一个随机 MID,则发生不知情的 MID 冲突的可能性相当高。根据 coap 服务器的重复数据删除实现(严格按照 RFC7252 或对此有所了解),您的客户端可能需要一种策略来逃避这种情况,即服务器仅基于 MID 重新传输不相关的消息。我从那时起的经验是,“分析你得到的东西,如果它闻起来,请等待 247 :-)”。您的客户端还可以保存最后使用的 MID 来克服这个问题,或者使用禁用重复数据删除的特殊/单独的“块级端点”。

  4. 知识产权。FMPOV 一些人已经看到了留给实施的问题并开始申请专利。这也可能需要注意。

加在一起:如果你对有时 K 字节的有效负载使用逆向,我的经验还不错。但是如果你经常转移更多,coap可能不是正确的选择。


推荐阅读