Quality of service(MQTT)

  想查看英文原文的请点击原文网址。本文是paho中讲述Qos的,其中重要的一点就是当发送端和接收端的Qos不一致时,取Qos的级别小的为准。水平有限,如有翻译不当之处,欢迎指正。

服务质量

  MQTT 协议为在客户端和服务器之间的消息传递提供了三种服务质量: “最多一次”、”至少一次” 和 “只有一次”。

  服务质量 (QoS) 是正在发布的单个消息的属性。应用程序通过将MQTTClient_message. qos字段设置为所需的值来设置特定消息的QoS。

  订阅客户端可设置QoS的级别,服务端根据客户端的设置发送消息。通过MQTTClient_subscribe ()MQTTClient_subscribeMany () 函数设置级别。因而, 转发给订阅端的消息的,其QoS可能与原始发布端为消息提供的QoS不同,两个值中的下限用于转发消息。

三个级别分别为:
  QoS0,最多一次:消息最多发送一次或可能一次都没有。消息跨网络的传播不被确认,也不会存储。如果客户端断开连接或服务器出故障,消息就可能会丢失。Qos0是最快的传输方式,有时它被称为”开火然后遗忘”

  MQTT协议不要求服务器将QoS0的消息转发到客户端(好吧,这句话我去查了资料,也 没明白是什么意思,可能是我翻译有误)。如果客户端在服务器收到消息时已断开连接, 则消息可能会被丢弃, 具体取决于服务器的实现。

  QoS1, 至少一次: 消息总是传递至少一次。如果在发送端的收到确认之前出现故障, 消息可能会多次发送。消息必须在发送端本地存储,直到发送端收到由接收端发布的该消息的确认,消息存储起来以防需要再次发送。

  QoS2, 只有一次: 消息总是被发送有且只有一次。消息必须在发送端本地存储,直到发送端收到由接收端发布的该消息的确认,消息存储起来以防需要再次发送。消息存储起来以防需要再次发送。QoS2 是最安全, 但也是最慢的传输方式。使用比 QoS1 更复杂的握手和确认程序, 以确保不会发送重复的消息。

猜你喜欢

转载自blog.csdn.net/weixin_37139197/article/details/78915648