TCP/IP是MQTT必需的吗?

6
如果是这样,你知道非TCP网络可能出现什么问题吗?
了解MQTT时,我看到有几处提到MQTT依赖于TCP/IP协议栈。例如,来自mqtt.org的引用:
“MQTT for Sensor Networks旨在面向非TCP/IP网络上的嵌入式设备,而MQTT本身明确希望使用TCP/IP协议栈。”
但如果你阅读参考文档,你不会找到类似的内容。此外,还有一个“QoS”字段可用于可靠传输,在TCP/IP网络中除了0之外的值基本上无用。目前我看不到任何阻止我使用UNIX管道、域或UDP套接字而不是TCP套接字建立MQTT连接的东西。
2个回答

13

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

关于TCP的可靠性,在理论上你所说的是正确的,但在实践中,当应用程序调用write()并且返回成功时,它不能保证数据已经真正从计算机传输到远程主机。所有write()(或send())做的只是将数据复制到内核缓冲区,此时您没有进一步的控制权。

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


我没有尝试过,但我认为类型为SOCK_STREAM的Unix套接字足够接近TCP,应该可以正常工作。虽然我能想到的唯一优点是Unix权限。 - njh

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接