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