本文介绍MQTT连接掉线的排查方法。
如何在物联网平台设置设备心跳?
物联网平台提供多种语言的Link SDK,每个SDK设置心跳的方式大同小异,具体内容,请参见:
如果您使用开源MQTT实现设备接入,需您在开源MQTT的参数中自行查找心跳参数进行配置。
MQTT保活心跳的详细说明,请参见MQTT保活。
物联网平台能否自行配置MQTT连接参数?
可以。MQTT连接通信的参数说明,请参见MQTT-TLS连接通信、MQTT-WebSocket连接通信、基于IPv6的MQTT连接通信。
为什么设备一直上下线?
如果发现设备反复上下线,很有可能同一个设备证书用于多个设备连接认证。例如有两个设备,但使用了同一个设备证书。设备1先上线,设备2后上线。设备2连接认证时,系统会把设备1的连接断掉,而设备1又会重连,再将设备2断掉,如此循环。可以通过日志服务,根据设备信息查询日志情况。
单设备每分钟最大连接请求次数为5次,超出5次的连接请求将被拒绝。
如何判断设备掉线的原因?
如果不是设备主动断开连接,可以通过设备日志来判断原因。
如果出现类似Keepalive timeout after xx sec
这样的日志,说明设备没有及时发送心跳包给物联网平台。服务器容忍5秒的延迟,如果还是没有收到ping包,服务器会关闭与设备的连接。
关于MQTT保活说明,请参见MQTT保活。
如何检查网络问题?
如果您的本地环境无法连接服务器,请检查下本地网络情况。常用的网络检查命令:
ping ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com
:用于检测是否可以连接物联网平台服务器。telnet ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com 1883
:用于检测1883端口连接情况。
如果以上的检测结果显示没有问题,但是接入仍然不成功,请检查本地防火墙策略。建议可通过traceroute、tcpdump分析网络具体原因。
另外,除了MQTT规范标准默认的1883端口,您也可以尝试使用443端口去连接MQTT server。在防火墙默认设置的情况下,443端口被拦截的机率小很多。