MQTT是一个消息协议,最开始就是为物联网设备的网络接入而设计的,物联网设备大多都是性能低下,功耗较低的计算机设备,而且网络连接的质量也是不可靠的。它采用发布/订阅的模式来传递消息。这种模式,可以方便的传递到0,1或者多个客户端。和TV比较像,比如TV1发布电视剧到TV1频道,所有调到TV1频道的用户,都可以在电视上看到这个电视剧。

【MQTT学习笔记二】MQTT的协议特性和工作方式

要点:

  1. MQTT客户端没有地址,消息也不是直接发给它;
  2. 消息是通过topic发布到broker;
  3. MQTT broker的作用就是根据topic过滤信息并分发给订阅者;
  4. 客户端可以通过订阅同一个broker的topic来获取消息;
  5. 消息发布者和订阅者之间没有直接连接;
  6. 所有的客户端都可以发布和订阅;
  7. MQTT broker一般不储存消息

MQTT协议特性:

1、使用发布/订阅消息模式,提供一对多的消息发布和应用程序之间的解耦;

2、消息传输不需要知道负载内容;

3、使用 TCP/IP 提供网络连接;

4、有三种消息发布的服务质量:

QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。

QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。

QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。

5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;

6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;

MQTT客户端和broker的连接:

  1. MQTT是通过TCP/IP连接broker的。客户端和broker建立连接(connect),需要broker的确认(connack)。一般情况下,一旦连接建立,即使不发送消息,连接也会被保持。客户端会定时给broker发送心跳(pingreq)。
  2. 每个client必须有名字(client id),且唯一。如果用了已经存在的client id去连接broker,那已存在的连接就会被断开。大部分MQTT客户端都会在断开连接之后尝试重连,所以如果2个链接用了同一个client id就会一直掉线和重连,所以要避免这种情况出现。
  3. MQTT客户端默认和broker建立的是干净的会话。如果当前会话要求不清理,broker就会保存没有发送的消息。不过这个取决于发布和订阅的QoS等级。
  4. 遗嘱消息是用来通知订阅者们,由于网络中断,和发布者的连接已经中断。遗嘱消息会保存在broker中。遗嘱消息由发布者连接broker时提供,发布者正常断开连接时,遗嘱消息不会发送,异常断开,broker会把遗嘱消息发送给订阅者们。一般用户设备掉线,需要通知客户的情况。

相关文章: