MQTT相关知识点整理

客户端(client):
使用mqtt的程序或设备,客户端总是通过网络连接到服务端。它可以
发布应用消息给其他相关的客户端
订阅以请求接收相关的应用消息
取消订阅以移除相关的应用消息
从服务端断开连接
服务端(server):
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。服务端
接收来自客户端的网络连接
接收客户端发布的应用消息
处理客户端的订阅和取消订阅请求
转发应用消息给符合条件的客户端订阅


mqtt包括客户端、代理两部分,以智能家居系统为例,末端智能电器与手机为客户端,云中心为代理。客户端首先向代理发起请求,代理收到后对客户端认证,认证通过后在客户端和代理之间建立一个TCP长连接通道,客户端通过该通道订阅若干关注的主题(TOPIC),同时在自身状态发生变化时,向相应的主题发布消息,代理将该消息发给正在订阅该主题的所有客户端。与http不同,mqtt是一种多对多的通信协议,设备不直接相连,而是通过一个代理实现互相通信。他是一种天然的异步协议,可以很好地将请求端和响应端解耦。

MQTT协议的好处:
1、特别轻量级,使用一个8位的系统,30K的空间,就可运行MQTT的客户端
2、本身是针对不稳定网络设计的,通常意义上的传输协议都是基于稳定网络传输,会专门为了这种稳定网络去做一些优化。MQTT正相反,协议较多地考虑了网络的不确定性,它本身还非常精简,最小的传输字节只有两个,使得在较恶劣的网络条件下仍然有较好的消息可达率。
3、它的消息交互模式跟传统意义上不太一样,采用了发布和订阅的模式。当数据源发布一条消息的时候,可以有多个订阅端同时能收到这个消息,这对于很多设备互联的物联网场景比较灵活。
4、具有消息发布服务质量(Qos)机制,用户可根据应用场景需要,选择“至多一次”、“至少一次”或“只有一次”的传输质量,在效率和质量之间进行权衡。
5、客户端异常中断的通知机制(last-will-and-testament)。当一个设备连不上的时候,服务器端有一个专门的机制能马上知道这个设备出了什么情况,从而可以非常快的反馈,对某一个结点做出一些补偿。

针对没有TCP/IP支持的终端环境MQTT无法应用的情况:
可以采用MQTT-SN(MQTT For Sensor Networks)协议进行补充,它是为了非常受限类似传感器设计的,能够基于IEEE 802.15.4等无线局域网发送UDP数据包,再通过MQTT-SN网关与MQTT broker建立连接。

协议可拆分为:固定头部+可变头部+消息体
可变头部内容字节长度 + Playload/负荷字节长度 = 剩余长度
byte1:
message type:总共四位代表可16种消息类型,去除0和15保留待用,共14种。
DUP flag:如果 DUP 标志被设置为 0, 表示这是客户端或服务端第一次请求发送这个 PUBLISH 报文。 如果 DUP 标志被设置为 1,表示这可能是一个早前报文请求的重发。
Qos level:选择“至多一次”、“至少一次”或“只有一次”的传输质量
RETAIN:仅针对publish消息。 1:表示发送的消息需要一直持久保存(不受服务器重启影响),不但要发送给当前的订阅者,并且以后新来的订阅了此Topic name的订阅者会马上得到推送。
备注:新来乍到的订阅者,只会取出最新的一个RETAIN flag = 1的消息推送。
0:仅仅为当前订阅者推送此消息。
byte2:
remaining length在当前消息中剩余的byte(字节)数,包含可变头部和负荷(称之为内容/body,更为合适)。单个字节最大值:01111111,16进制:0x7F,10进制为127。单个字节为什么不能是11111111(0xFF)呢?因为MQTT协议规定,第八位(最高位)若为1,则表示还有后续字节存在。同时MQTT协议最多允许4个字节表示剩余长度。那么最大长度为:0xFF,0xFF,0xFF,0x7F,二进制表示为:11111111,11111111,11111111,01111111,十进制:268435455 byte=261120KB=256MB=0.25GB

报文标识符:16位
客户端和服务端彼此独立的分配报文标识符。因此,客户端服务端组合使用相同的报文标识符可以实现并发的消息交换。

保持连接(keepalive 16位)是一个以秒为单位的时间间隔,指客户端在发送完当前报文的时刻到下一个报文发送时刻,两者之间的最大间隔。客户端必须保证两个报文的传输间隔不超过保持连接的值,若在保持连接的时间内没有报文要发送,必须发送一个 pingreq报文。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值