http - 是否可以通过 CoAP 传输文件?
问题描述
最近,我在做一个项目,我正在尝试将一个 json 文件传输到 CoAP 服务器。我在键:值对中放置了一些随机值,例如:
{
key1: value1,
key2: [value21, value22, value23]
}
问题:
- CoAP 与 HTTP 非常相似。那么,像 HTTP 一样,是否可以使用 POST/PUT 方法通过 CoAP 传输 json 文件?如果可能,建议将上传文件放入服务器(资源目录)的目录位置是什么?
更新:
实际文件大小约为 152.8 kB。
解决方案
对于第一次尝试,您可以尝试 eclipse/californium 的“simple-fileserver-example”。
支持读取 (GET) 并为此使用选项块 2。
如果你更深入并离开实验室,RFC7959 blockwise可能会面临几个问题。
coap 通常假设端点由它们的 ip 地址(和端口)标识。尽管逐块传输可能会持续更长时间,但这种假设可能会被打破。如果客户端面临这样的地址更改,块选项 2 (GET) 可能会起作用,但对于块选项 1 (PUT),则需要特殊准备。
虽然这种逐块传输往往会持续更长时间,但由于临时传输问题,它可能会暂停。这需要一个“恢复或失败”的策略。这里 GET 也比 PUT 容易得多。
崩溃时的基本传输问题。根据我的经验,blockwise 有很多块,并且在短时间内使用了很多 MID。如果客户端在启动时崩溃并选择了一个随机 MID,则发生不知情的 MID 冲突的可能性相当高。根据 coap 服务器的重复数据删除实现(严格按照 RFC7252 或对此有所了解),您的客户端可能需要一种策略来逃避这种情况,即服务器仅基于 MID 重新传输不相关的消息。我从那时起的经验是,“分析你得到的东西,如果它闻起来,请等待 247 :-)”。您的客户端还可以保存最后使用的 MID 来克服这个问题,或者使用禁用重复数据删除的特殊/单独的“块级端点”。
知识产权。FMPOV 一些人已经看到了留给实施的问题并开始申请专利。这也可能需要注意。
加在一起:如果你对有时 K 字节的有效负载使用逆向,我的经验还不错。但是如果你经常转移更多,coap可能不是正确的选择。
推荐阅读
- sql - SQL case 语句然后转换为 int
- node.js - 如何查询 node.js 实例设置了哪些选项/标志?
- r - 从字符串中删除**
- javascript - 渲染视图而不向最终用户显示
- python - 每个单独的行和列(每个字段)随机播放逗号分隔的字符串
- mongodb - 如何使用带有 express/bodyParser 的邮递员修复“....验证失败”
- powershell - 如何在PowerShell中比较JSON
- google-cloud-platform - Google Cloud Dataflow 使用“??”删除重音符号和特殊字符
- javascript - 未使用 redux 验证条件时如何防止重新渲染页面
- jestjs - 使用 jest 测试框架的 LWC 测试引发错误 - 元素的未知公共属性“smalldevicesize”