【参考文章】:基于Mqtt的IM开发html
【参考文章】:阿里___MQTT中协议QoS的实现git
【参考文章】:MQTT入门篇github
1. 简介
MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,所以易于实现。这些特色使得它对不少场景来讲都是很好的选择,包括受限的环境如机器与机器的通讯(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽很是昂贵。网络
由于MQTT是协议,想要使用它就必须找实现这个协议的库文件或者服务组件,这是实现MQTT协议的服务组件。架构
搭建完成MQTT的服务端环境,再经过封装的MQTT客户端API,就可使用了。post
2. 特色
- 轻量级的 machine-to-machine 通讯协议。
- publish/subscribe模式。
- 基于TCP/IP。
- 支持QoS。
3. 应用场景
- 适合于低带宽、不可靠链接、嵌入式设备、CPU内存资源紧张。
- 是一种比较不错的Android消息推送方案。
- FacebookMessenger采用了MQTT。
- MQTT有可能成为物联网的重要协议
4. 主题
MQTT是经过主题对消息进行分类的,本质上就是一个UTF-8的字符串,不过能够经过反斜杠表示多个层级关系。主题并不须要建立,直接使用便可。url
主题还能够经过通配符进行过滤。spa
/:用来表示层次,好比a/b,a/b/c。 设计
#:表示匹配>=0个层次,好比a/#就匹配a/,a/b,a/b/c。单独的一个#表示匹配全部。不容许 a#和a/#/c。代理
+:表示匹配一个层次,例如a/+匹配a/b,a/c,不匹配a/b/c。单独的一个+是容许的,a+不容许,a/+/b不容许
5. 服务质量(Quality of Service,QoS)
5.1 QoS=0
最多一次,质量级别最低,不须要应答确认。
尽操做环境所能提供的最大努力分发消息,可是遇到意外并不会重试。消息可能会丢失。
例如,这个等级可用于环境传感器数据,单次的数据丢失不要紧,由于不久以后会再次发送。
5.2 QoS=1
至少一次,有可能重复。
消息接收者若是没有知会或者知会自己丢失,消息发送者会再次发送以保证消息接收者至少会收到一次,固然可能形成重复消息。
收到控制报文后须要应答确认,好比建立链接、发消息、收消息、心跳。
5.3 QoS=2
只有一次,确保消息只到达一次(用于比较严格的计费系统)。
收到控制报文后须要应答确认,最高的服务质量,须要额外的开销,由于这种质量下,收到控制报文须要双向确认应答。
6. 消息类型
MQTT拥有14种不一样的消息类型:
- CONNECT:客户端链接到MQTT代理
- CONNACK:链接确认
- PUBLISH:新发布消息
- PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复
- PUBREC:QoS 2消息流的第一部分,表示消息发布已记录
- PUBREL:QoS 2消息流的第二部分,表示消息发布已释放
- PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成
- SUBSCRIBE:客户端订阅某个主题
- SUBACK:对于SUBSCRIBE消息的确认
- UNSUBSCRIBE:客户端终止订阅的消息
- UNSUBACK:对于UNSUBSCRIBE消息的确认
- PINGREQ:心跳
- PINGRESP:确认心跳
- DISCONNECT:客户端终止链接前优雅地通知MQTT代理