我能想到的唯一可能的原因是低开销,即最小仅2字节的固定报头大小,导致低数据包大小。协议设计中还有其他因素吗?
编辑: - 对不起,我发了一个精神错字(?),正如@Shashi指出的那样,我实际上意味着高延迟,低带宽。答案 0 :(得分:1)
MQTT专为内存占用少,网络带宽低等设备而设计。设备,例如传感器,电表,起搏器等,是MQTT的理想用例。低延迟意味着高速。对于低延迟,您需要不同的协议,例如通过千兆以太网或InfiniBand网络运行的可靠多播。
答案 1 :(得分:1)
其中一个关键因素是,MQTT客户端建立的TCP连接始终被重用。这意味着您不必一直建立新的连接,因为它是经典HTTP的情况。此外,正如您已经怀疑的那样,非常低的数据包大小是关键,典型的MQTT消息在原始TCP数据包上没有太多开销。
为了在不可靠的网络上节省更多带宽,MQTT的持久会话功能允许客户端只订阅一次,重新连接时,客户端将保留订阅。对于订阅客户端,这可以大大减少开销,因为订阅消息只发送一次。
答案 2 :(得分:0)
另一个原因,似乎是遗嘱和遗嘱功能,这对于在高延迟网络,低带宽和不可靠网络中具有功能非常有用。