【发布时间】:2017-01-09 17:11:06
【问题描述】:
我正在研究 MQTT 协议,似乎规范的第一行存在矛盾:
协议通过 TCP/IP 或其他网络协议运行 提供有序、无损、双向连接。它的特点 包括:
[...]
三种服务质量 消息传递:
- “最多一次”,其中消息位于 根据操作环境的最大努力交付。 可能会发生消息丢失。例如,可以使用此级别 环境传感器数据,个人读数无关紧要 由于下一个将很快发布,因此丢失了。 ·
- “在 至少一次”,其中消息可以保证到达,但重复的可以 发生。 ·
- “恰好一次”,保证消息到达 恰好一次。例如,此级别可用于计费 重复或丢失消息可能导致不正确的系统 正在收取费用。
如果 MQTT 只能在无损的网络协议上运行,那么提供有损级别的 QoS(级别 0)是什么意思?
我相信它甚至不可能提供,因为 TCP 协议将负责重新传输丢失的消息。这对于旨在在非 TCP、不可靠网络上运行的 MQTT-SN 来说是有意义的。
(备注:使用 TCP 协议时,级别 1“至少一次”没有意义,因为 TCP 已经包含此保证,但在更一般的情况下可能有意义,因为规范说可以使用其他无损协议)
【问题讨论】: