< >
Home » Farmbot开发入门教程 » farmbot开发入门教程-订阅资源更新

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

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: none