farmbot开发入门教程-订阅资源更新
说明:
资源是从 API 中下载的 JSON 文档形式
HTTP 是一种无状态协议。这为应用程序开发人员提供了许多好处,但也带来了一些缺点
场景:与许多用户共享数据
您在一个 6 人研究团队中工作,该团队共用一个 FarmBot。为了跟踪花园,您编写了一个花园查看器应用程序,该应用Plant程序通过 REST API ( GET https://my.farm.bot/api/plants) 下载并显示资源。
应用程序运行良好,但偶尔你会发现应用程序显示“过时数据”。也就是说,你从 API 下载的 JSON 文档不再有效,因为你团队中的某个人在你下载后更新了数据。
在需要一致数据的应用程序中,我们如何确保拥有资源的最新版本?
坏主意:HTTP 轮询
一种快速解决方案是执行轮询(不要这样做)。也就是说,我们可以重写我们的应用程序,使其Plant在 30 秒的定时器内下载
- 浪费大量带宽,这对于计量互联网服务计划来说尤其成问题。
- 计算成本高昂,因为应用程序即使在空闲时也会不断检查更新。
- 如果轮询过于频繁,则有受到速率限制或被服务器禁止的风险。
使用自动同步
正如我们在上例中看到的,轮询有许多缺点,使其不适合生产规模的应用程序。幸运的是,Web API 公开了一项称为自动同步的功能,该功能允许您通过 MQTT 订阅数据更新。使用自动同步,无需轮询 - 所有数据更新都会实时发布给订阅者。
与大多数其他资源管理用例不同,自动同步是通过 MQTT 而不是 HTTP 执行的。
要接收特定资源的数据更新,请登录消息代理并订阅与以下模式匹配的 MQTT 主题:
bot/device_DEVICE_ID/sync/RESOURCE_NAME/RESOURCE_ID
您需要用以下信息替换上面的大写名称:
- DEVICE_ID- 当前机器人的整数 ID
- RESOURCE_NAME- 资源名称(以CamelCase 格式)。例如:ToolSlot、Sequence、FarmEvent。
- RESOURCE_ID- 您希望接收更新的资源的整数 ID。
一旦您订阅了适当的频道,您将收到类似以下示例格式的 JSON:
// Received via MQTT channel "bot/device_123/sync/User/1"
{
"args":{
"label":"123-20ab2-3d2d1"
},
"body":{
"id":1,
"email":"virgenritchie@reichert.info"
}
}
- 财产 用法
args.label 请求的唯一标识符。如果更改是由 HTTP 请求引起的,则此值将与X-Request-IdHTTP 请求的匹配。
body 新创建或更新的 JSON 资源。空主体表示资源已被删除。
自动同步订阅示例
下表说明了 MQTT 主题订阅的示例。
渠道 解释
bot/device_123/sync/User/1 订阅单个资源的变更:Userid 为 的资源1。
bot/device_456/sync/Sequence/# 订阅任何Sequence资源的任何更改。
bot/device_789/sync/# 订阅所有资源更新。截至2018年8月,支持以下资源名称:Alert,,,,,,,,,,,,,,,,,,,,,,,,,,,,Device。FarmEventFarmwareEnvFolderFbosConfigFirmwareConfigImageLogPeripheralPinBindingPlantTemplatePointGroupPointRegimenSavedGardenSensorSenso
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号