MQTT高延迟通信优化指南
MQTT的通信模式:
-
QoS等级 (Quality of Service):
-
QoS 0 (最多交付一次):对延迟最不敏感。消息发出去就不管了,高延迟只会拉长整个发布周期,但不会增加额外流量。
-
QoS 1 (至少交付一次):对延迟敏感。发布者发送
PUBLISH
后必须等待Broker的PUBACK
确认包。如果RTT很高,发布者需要等待更长时间才能确认消息是否成功,从而阻塞下一批消息的发送(如果设置了飞行窗口)。 -
QoS 2 (确保交付一次):对延迟最敏感。这个级别需要四次握手(
PUBLISH
->PUBREC
->PUBREL
->PUBCOMP
)来完成一次消息传递。一次消息的确认时间大约是 2 * RTT。高延迟会极大地降低消息吞吐速率。
-
-
心跳机制 (Keepalive):
这是MQTT连接稳定性的生命线。客户端和Broker通过心跳包(PINGREQ
/PINGRESP
)来确认对方是否在线。-
客户端会在
Keepalive Interval * 1.5
的时间内未收到任何数据包(包括心跳响应和其他消息)时,认为连接已断开。 -
如果网络延迟(RTT)接近或超过Keepalive时间间隔,极易导致误判
-