MQTT协议使用总结

一.MQTT简介MQTT是基于TCP/IP协议栈构建的异步通信消息协议 , 是一种轻量级的发布/订阅信息传输协议 。MQTT在时间和空间上 , 将消息发送者与接受者分离 , 可以在不可靠的网络环境中进行扩展 。适用于设备硬件存储空间有限或网络带宽有限的场景 。物联网平台支持设备使用MQTT协议接入MQTT的特点是可以保持长连接 , 具有一定的实时性 , 云端向设备端发送消息 , 设备端可以在最短的时间内接收到并作出响应 , 所以MQTT更适合需要实时控制的场合 , 更适合执行器 。要保持长连接 , 那么就要时不时地发送心跳包 , 这就不会省电了 。所以低功耗的场合并不适合MQTT 。MQTT的长连接需要建立在TCP的基础上 , TCP协议的复杂性决定了对设备的要求是比较高一些的 , 相比UDP 。
【MQTT协议使用总结】 
二.MQTT框架图 

MQTT协议使用总结

文章插图
 
 
 
三.MQTT特点MQTT协议是为大量计算能力有限 , 且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议 , 它具有以下主要的几项特性:
  • 使用发布/订阅消息模式 , 提供一对多的消息发布 , 解除应用程序耦合;
  • 对负载内容屏蔽的消息传输;
  • 使用 TCP/IP 提供网络连接;
  • 有三种消息发布服务质量:QoS(定阅等级) , 分0、1、2三个等级 , 简单来说是等级越高越可靠 。
“至多一次”(QoS0):消息发布完全依赖底层 TCP/IP 网络 。会发生消息丢失或重复 。这一级别可用于如下情况 , 环境传感器数据 , 丢失一次读记录无所谓 , 因为不久后还会有第二次发送 。即是推送之后就完事了 , 至于对方有没有收到 , 收到是什么 , 数据有没有丢失 , 都不管 。
“至少一次”(QoS1):确保消息到达 , 但消息重复可能会发生 。即是你收到推送后 , 你还得返回一个puback给对方 , 告诉对方收到了 , 不然对方会以为你没收到 , 隔一段时间后重新给你推送 , 直到你给对方返回一个Puback为止 。
“只有一次”(QoS2):确保消息到达一次 。这一级别可用于如下情况 , 在计费系统中 , 消息重复或丢失会导致不正确的结果 。
MQTT协议使用总结

文章插图
 
  • 小型传输 , 开销很小(固定长度的头部是2字节) , 协议交换最小化 , 以降低网络流量;
  • 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制 。
Last Will:即遗言机制 , 用于通知同一主题下的其他设备发送遗言的设备已经断开了连接 。? Testament:遗言机制 , 功能类似于Last Will 。
MQTT客户端可以注册一个典型的遗愿遗嘱消息 , 如果它们断开连接 , 由代理发送 。这些消息可以用于向订阅者发出信号 , 当设备断开连接时 。
四.MQTT协议原理1.MQTT协议实现框图 
MQTT协议使用总结

文章插图
 
?
2.MQTT协议实现方式实现MQTT协议需要:客户端和服务器端MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe) 。其中 , 消息的发布者和订阅者都是客户端 , 消息代理是服务器 , 消息发布者可以同时是订阅者 。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分
  • Topic:可以理解为消息的类型 , 订阅者订阅(Subscribe)后 , 就会收到该主题的消息内容(payload) 。
  • Payload:可以理解为消息的内容 , 是指订阅者具体要使用的内容 。
3.网络传输与应用消息MQTT会构建底层网络传输:它将建立客户端到服务器的连接 , 提供两者之间的一个有序的、无损的、基于字节流的双向传输 。当应用数据通过MQTT网络发送时 , MQTT会把与之相关的服务质量(QoS)和主题名(Topic)相关连 。
4.MQTT客户端一个使用MQTT协议的应用程序或者设备 , 它总是建立到服务器的网络连接 。客户端可以:


推荐阅读