更新时间:2024-10-11 GMT+08:00

使用前必读

概述

MQTT是一种底层传输协议,一般用于网络通信,它提供有序有的、可靠的、双向字节流传输,支持设备到云端和云端到设备之间的消息传递,是基于发布/订阅模模式的“轻量级”通信协议。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

图1 MQTT

数据包组成

MQTT消息由固定报头(Fixed header)、可变报头(Variable header)和有效载荷(Payload)三部分组成。在MQTT规范中有说明,建议使用设备侧SDK进行接入。

其中固定报头(Fixed header)和可变报头(Variable header)格式的填写请参考MQTT标准规范。有效载荷(Payload)的格式由应用定义(须使用UTF-8编码格式),即设备和物联网平台之间的定义。

  • 固定报头:每个 MQTT 控制报文都包含一个固定报头,用于决定控制报文类型、在PUBLISH中还用于决定最大服务质量(QoS),如:建链、订阅、发布。
  • 可变报头:某些 MQTT 控制报文包含一个可变报头部分。它在固定报头和负载之间。可变报头的内容根据报文类型的不同而不同。包含可变报头的报文标识符(Packet Identifier),用于区分同一链路的不同数据包。
  • 有效载荷:某些 MQTT 控制报文在报文的最后部分包含一个有效载荷,对于 PUBLISH 来说有效载荷就是应用消息(由用户自己定义)。

MQTT的语法和接口细节,请以MQTT标准规范为准。

主要控制报文类型

常见MQTT消息类型主要有CONNECT、SUBSCRIBE、PUBLISH、PINGREQ。

  • CONNECT:指客户端请求和服务端连接。有效载荷(Payload)的主要参数,参考设备连接鉴权填写。
  • SUBSCRIBE:订阅包括主题筛选器(Topic Filter)和最大服务质量(QoS),一个会话可以进行多个订阅。向平台订阅可以参考:Topic定义
  • PUBLISH:是指从客户端向服务端或者服务端向客户端传输一个应用消息。
    • 可变报头(Variable header)中的主要参数“Topic name”,指服务端或客户端的发布主题。详细请参考Topic定义
    • 有效载荷(Payload)中的主要参数为完整的数据上报和命令下发的消息内容,一般是一个JSON或字符串对象。
  • PINGREQ:指客户端发给服务端的心跳请求。主要用于告知服务端客户端还活着、确认网络连接没有断开。约定的发送周期由协商的Keep Alive决定。

使用限制

  • 上行Topic是指设备向平台发送请求,或上报数据,或回复响应。
  • 下行Topic是指平台向设备下发指令,或回复响应。
  • 设备与平台建立连接后,需要订阅下行Topic(华为云平台中具有隐式订阅功能,若通信质量为Qos0,平台的系统topic无需订阅。),否则无法收到平台下发的指令或回复的响应。应用侧接口的调用,需要设备侧的配合,例如应用侧下发命令,设备侧需要先订阅“平台命令下发”的下行Topic,否则设备无法收到平台命令,应用下发命令的接口也会报超时。