Hello World

MQTT 简介

【参考文章】:基于Mqtt的IM开发

【参考文章】:阿里___MQTT中协议QoS的实现

【参考文章】:MQTT入门篇

1. 简介

  MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。

  因为MQTT是协议,想要使用它就必须找实现这个协议的库文件或者服务组件,这是实现MQTT协议的服务组件

  搭建完成MQTT的服务端环境,再通过封装的MQTT客户端API,就可以使用了。

2. 特点

  • 轻量级的 machine-to-machine 通信协议。
  • publish/subscribe模式。
  • 基于TCP/IP。
  • 支持QoS。

3. 应用场景

  • 适合于低带宽、不可靠连接、嵌入式设备、CPU内存资源紧张。
  • 是一种比较不错的Android消息推送方案。
  • FacebookMessenger采用了MQTT。
  • MQTT有可能成为物联网的重要协议

4. 主题

  MQTT是通过主题对消息进行分类的,本质上就是一个UTF-8的字符串,不过可以通过反斜杠表示多个层级关系。主题并不需要创建,直接使用即可。

  主题还可以通过通配符进行过滤。

  /:用来表示层次,比如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种不同的消息类型:

  1. CONNECT:客户端连接到MQTT代理
  2. CONNACK:连接确认
  3. PUBLISH:新发布消息
  4. PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复
  5. PUBREC:QoS 2消息流的第一部分,表示消息发布已记录
  6. PUBREL:QoS 2消息流的第二部分,表示消息发布已释放
  7. PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成
  8. SUBSCRIBE:客户端订阅某个主题
  9. SUBACK:对于SUBSCRIBE消息的确认
  10. UNSUBSCRIBE:客户端终止订阅的消息
  11. UNSUBACK:对于UNSUBSCRIBE消息的确认
  12. PINGREQ:心跳
  13. PINGRESP:确认心跳
  14. DISCONNECT:客户端终止连接前优雅地通知MQTT代理

 

 

 

posted @ 2019-04-29 13:47  小小忧愁米粒大  阅读(306)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书