如果是这样,您是否知道非TCP网络中出现问题的示例?
了解MQTT我遇到了几个提到MQTT依赖于TCP / IP堆栈的事实。例如,来自mqtt.org:
传感器网络的MQTT针对非TCP / IP上的嵌入式设备 网络,而MQTT本身明确期望 TCP / IP堆栈。
但如果您阅读参考文件,您将无法找到类似的内容。此外,还有 QoS 字段可用于可靠传送,其中0以外的值在TCP / IP网络中基本无用。现在我看到没有什么能阻止我使用UNIX管道,域或UDP套接字而不是TCP套接字建立MQTT连接。
答案 0 :(得分:10)
MQTT只需要有序且可靠的交付,它不一定是TCP。例如,SCTP工作得很好,但UDP没有,因为没有办法保证由多个UDP数据包组成的大型PUBLISH数据包将按顺序到达并完成。
关于TCP可靠性,理论上你所说的是正确的,但实际上当应用程序调用{{1}}并获得成功的返回时,它无法保证数据何时实际上是从计算机到远程主机。所有write()
(或write()
)都会将数据复制到内核缓冲区,此时您无法进一步控制。
确保消息在应用程序级别到达远程主机的唯一方法是让远程主机回复。
答案 1 :(得分:1)
MQTT-SN(用于传感器网络)是MQTT在TCP / IP上运行时遇到的问题的解决方案。 有一个MQTT网关的概念,它被引入MQTT-SN,这有助于实现非TCP / IP实现。 http://emqttd-docs.readthedocs.io/en/latest/mqtt-sn.html