02.腾讯云物联网设备端学习---MQTT协议简介

本系列主要目的在于记录腾讯云物联网设备端的学习笔记,并且对设备端SDK进行补充说明。

MQTT协议简介

MQTT协议3.1.1简介

腾讯云物联网目前主要兼容MQTT协议3.1.1版本,所以后续主要以3.1.1版本中的设计来展开。对于做应用开发来说,主要需要理解MQTT的基本概念以及相关特性,以下做简单概括:

  • 客户端:即物联网设备,可以通过腾讯云物联网SDK,包括IoT Hub C SDK以及IoT Explorer C SDK 等连接平台
  • 服务器:即物联网服务平台,比如IoT Hub、IoT Explorer
  • 服务质量:特别注意,服务质量只针对PUBLISH控制包。腾讯云物联网支持QoS0和QoS1(QoS2可在业务层做,比如在payload中增加去重标记)
    • QoS0:消息只发送一次
    • QoS1:消息发送后,需要接收到PUBACK,不然一定间隔后会重新发送,次数和间隔取决于平台和设备端实现
      • 设备端:sdk 中会告知QoS1消息是否到达或者超时失败,具体处理交给用户决定。在该系列后续的文章会提到,届时在此处补充链接。
      • 物联网服务平台:当QoS1消息未收到Puback会以3s间隔重发,最多3次
  • 会话:通过CleanSession(CONNECT控制包的标记)可以使用已有会话或者创建新会话。创建会话和使用已有会话只有一个区别,即使用已有会话会保留上个会话的订阅关系,以及收到离线下发和下发后未确认的QoS1消息。请参见MQTT持久性会话。
  • 订阅:订阅的对象是主题名
    • IoT Hub中支持平台私有主题(平台已规定格式的主题名,具有特殊用途,比如广播等)和自定义设备相关主题(即以${productID}/${deviceName}/<usr_data>等),并控制发布/订阅权限
    • IoT Explorer中主要是使用平台私有主题进行交互,比如数据模板、OTA等
  • 保活:设备端具有保活机制,当设备无数据交互时,根据约定的keep alive值定期跟平台发送心跳包(即PINGREQ)
    • 设备端SDK当两次心跳包未收到回复(PINGRESP)时将会进行重连
    • 物联网服务平台会在1.5倍keep alive时间未收到心跳包时,断开与设备的连接

以上就是应用开发需要注意MQTT的相关事项,但是出于学习还是得弄清楚设备端的具体实现的。所以后续文章将会针对平台支持的11种MQTT包类型(CONNECT、CONNACK、PUBLISH、PUBACK、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PINGREQ、PINGRESP、DISCONNECT)进行解析,并且结合一些项目经验进行说明。

相关参考:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.pdf