TCP/IP 是 MQTT 的强制要求吗?

Is TCP/IP a mandatory for MQTT?

如果是这样,您知道在非 TCP 网络中可能出错的示例吗?

了解 MQTT 我多次提到 MQTT 依赖于 TCP/IP 堆栈这一事实。例如,来自 mqtt.org:

MQTT for Sensor Networks is aimed at embedded devices on non-TCP/IP networks, whereas MQTT itself explicitly expects a TCP/IP stack.

但是如果您阅读参考文档,您将找不到类似的东西。此外,还有 QoS 字段可用于可靠传送,其值非 0 在 TCP/IP 网络中基本上无用。现在我没有看到任何东西会阻止我使用 UNIX 管道、域或 UDP 套接字而不是 TCP 套接字建立 MQTT 连接。

MQTT 只需要有序且可靠的传递,不一定是 TCP。例如,SCTP 工作得很好,但 UDP 不行,因为无法保证由多个 UDP 数据包组成的大型 PUBLISH 数据包按顺序完整到达。

关于TCP的可靠性,理论上你说的是对的,但实际上当一个应用程序调用write()并接收到一个成功的return时,它不能保证数据何时到达实际上是从计算机到远程主机。 write()(或send())所做的只是将数据复制到内核缓冲区,此时您无法进一步控制。

确保消息在应用程序级别到达远程主机的唯一方法是让远程主机回复。

MQTT-SN(用于传感器网络)是 MQTT 在 运行 超过 TCP/IP 时遇到的问题的解决方案。 MQTT-SN 引入了 MQTT 网关的概念,有助于引入非 TCP / IP 实现。 http://emqttd-docs.readthedocs.io/en/latest/mqtt-sn.html