gpt4 book ai didi

tcp - MQTT QoS 的用途/目的是什么?

转载 作者:可可西里 更新时间:2023-11-01 02:31:10 26 4
gpt4 key购买 nike

我正在研究 MQTT 协议(protocol),似乎在规范的第一行中存在矛盾:

The protocol runs over TCP/IP, or over other network protocols thatprovide ordered, lossless, bi-directional connections. Its featuresinclude:

[...]

Three qualities of service formessage delivery:

  • "At most once", where messages aredelivered according to the best efforts of the operating environment.Message loss can occur. This level could be used, for example, withambient sensor data where it does not matter if an individual readingis lost as the next one will be published soon after. ·
  • "Atleast once", where messages are assured to arrive but duplicates canoccur. ·
  • "Exactly once", where message are assured to arriveexactly once. This level could be used, for example, with billingsystems where duplicate or lost messages could lead to incorrectcharges being applied.

如果 MQTT 只能在无损网络协议(protocol)上运行,那么提供有损级别的 QoS(级别 0)有什么意义?

我相信甚至不可能提供这一点,因为 TCP 协议(protocol)将负责重新传输丢失的消息。这对于旨在在非 TCP、不可靠 网络上运行的 MQTT-SN 来说是有意义的。

(备注:级别 1“至少一次”在使用 TCP 协议(protocol)时没有意义,因为 TCP 已经包含此保证,但在更一般的情况下可能有意义,因为规范说可以使用其他无损协议(protocol))

最佳答案

严格来说,一个 TCP 帧在 TCP/IP 层被确认并不一定意味着在应用层,任何需要对数据包做的事情都已经有效地完成了。

在丢失 MQTT QoS 0 数据包的情况下,可能发生的情况是 TCP 数据包到达代理(即从客户端的角度来看确实已确认),但代理在中间崩溃将消息传递给所有订阅的客户端。

假设您有 100,000 个客户端订阅了 MQTT 主题 - 将数据转发给订阅的客户端需要一段时间,并且代理可能会在过程中死亡。从发布者的角度来看,消息确实已发布给代理,但确实存在消息丢失,因为一些订阅者永远不会听到该消息。

关于tcp - MQTT QoS 的用途/目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39277933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com