[关闭]
@ironzhang 2020-11-23T03:28:58.000000Z 字数 1007 阅读 270

HTTP/COAP 物联网接入层设计

ablecloud


需求

作为物联网的接入层,我们可以将通信需求分为以下四类模型:

  1. 设备端到服务端的单向消息模型,设备端往服务端发送消息后,不需要响应,只要服务端确认收到即可,如属性上报。
  2. 设备端到服务端的请求响应模型,设备端往服务端发送请求,需要响应,如获取当前最新 OTA 版本号。
  3. 服务端到设备端的单向消息模型,服务端往设备端下发消息,但不需要响应,如给设备下发 OTA 升级通知。
  4. 服务端到设备端的异步通信模型,服务端往设备端发送请求,等设备端响应返回后,通过回调或消息队列将响应返回给后端调用服务,如获取设备的实时属性。

设计

我们可以设计一个具备通用性的,类似nginx的代理服务和消息队列服务来实现上述需求。代理服务支持将设备端请求转发到后端其他服务,可支持转发到后端http服务或者kafka服务。

针对我们的一些功能需求,可配置如下接口:

1. 消息上报

  1. v1/things/{MajorDoamin}/{SubDomain}/{DeviceID}/report
  2. proxy_pass kafka://www.kafka.com:8000/report

2. 获取最新设备 OTA 版本

  1. v1/things/{MajorDoamin}/{SubDomain}/{DeviceID}/ota/versions/latest
  2. proxy_pass http://www.ota.com:8000/ota/versions/latest

3. 获取消息队列消息

  1. v1/things/{MajorDoamin}/{SubDomain}/{DeviceID}/messages
  2. proxy_pass http://www.messages.com:8000/messages

4. 返回请求响应

  1. v1/things/{MajorDoamin}/{SubDomain}/{DeviceID}/response
  2. proxy_pass kafka://www.kafka.com/response

功能应用

1. OTA 的实现

Created with Raphaël 2.1.2OTA服务OTA服务消息队列服务消息队列服务接入层代理接入层代理设备端设备端发送设备升级通知获取最新消息获取最新消息进入OTA升级状态获取最新OTA版本和版本下载地址转发请求返回最新OTA版本和版本下载地址转发响应比较获取的最新OTA版本与自身版本,不同则通过版本下载地址下载新版本
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注