Mqtt协议
1.概述
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
2.特性
(1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。订阅端为客户端,发布端为服务端,客户端也是服务端,服务端也是客户端。他们中间用一个代理(Broker)转发消息。
(2)Mqtt三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
(3)Last Will遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。
(4)Testament遗嘱机制,功能类似于Last Will。
3.传输方式
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
4.相关概念
(1)QoS:发布消息的服务质量,即:保证消息传递的次数
Ø00:最多一次,即:<=1
Ø01:至少一次,即:>=1
Ø10:一次,即:=1
Ø11:预留
(2)RETAIN: 发布保留标识,表示服务器要保留这次推送的信息,如果有新的订阅者出现,就把这消息推送给它,如果没有那么推送至当前订阅者后释放。
(3)ClientID:客户端唯一标识,服务端用于关联一个Session,只能包含这些 大写字母,小写字母 和 数字(0-9a-zA-Z),23个字符以内,如果 ClientID 在多次TCP连接中保持一致,客户端和服务器端会保留会话信息(Session),同一时间内 Server 和同一个 ClientID 只能保持一个 TCP 连接,再次连接会踢掉前一个。
(4)Keep Alive 心跳:目的是保持长连接的可靠性,以及双方对彼此是否在线的确认。客户端在Connect的时候设置 Keep Alive 时长。如果服务端在 1.5 * KeepAlive 时间内没有收到客户端的报文,它必须断开客户端的网络连接Keep Alive 的值由具体应用指定,一般是几分钟。允许的最大值是 18 小时 12 分 15 秒
(5)Will 遗嘱遗嘱消息(Will Message)存储在服务端,当网络连接关闭时,服务端必须发布这个遗嘱消息,所以被形象地称之为遗嘱,可用于通知异常断线。