全部产品
阿里云办公

连接掉线相关问题-MQTT

更新时间:2018-09-07 14:56:04

为什么设备一直上下线?

一般是调试过程中,如果看到设备反复上下线,很有可能同一个设备ID多处登录了;比如开了2个进程,但使用了同一个设备(deviceName),新的连接会把老的踢掉,而老的又会重连,进行互踢。对于这种情况,可以通过日志服务,根据deviceName查询日志情况。

注意,连接次数过多,服务器可能会对设备进行降级。

为什么设备掉线了,状态还是显示在线?

如果是设备异常断开,服务器通常要心跳周期后才能感知设备离线。控制台显示的状态是无法实时的。部分情况目前可能会导致设备状态不一致情况。比如, 1)部分服务器做断网演练或重启,而设备重连机制有故障,那么设备会一直看到在线状态。 2)设备开启时马上又闪断了,可能状态会出现不一致; 一般情况设备再次上线会自动修复。

设备掉线了都有什么原因?

如果不是设备主动断开,可以通过日志服务根据deviceName搜索,如果出现类似:[xxx][keepalive] [FAILURE] after 65 secs 这样的日志,那么说明设备的心跳包没有及时发送给服务器,服务器容忍5秒的延迟,如果还是没有ping包过来,服务器会把客户端关闭。

关于心跳(keepalive)

您可以指定心跳(keepalive)值,合法值范围为60~300秒。心跳会影响设备到服务器直接ping pong的频次。如果网络不稳定,建议心跳值设置稍微高一些。但是,对于设备异常断开场景,服务器主动感知设备掉线需要一个心跳周期的时间。所以心跳值越高,服务器主动感知设备掉线所需时间越长。这需要您根据您的业务场景进行权衡。正常情况下,3G、4G网络下,建议心跳值设置为120秒以上。 具体设置,请参考MQTT-TCP连接通信

如果您有特殊需求,请提交工单

网络相关问题

如果您的本地环境无法连接服务器,请检查下本地网络情况,常用一些工具:

ping ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com 检测主机是否可达情况

telnet ${productkey}.iot-as-mqtt.cn-shanghai.aliyuncs.com 1883 检测端口连接情况

如果上面的检测结果显示没有问题,但是接入还是不成功,那可能需要检查本地防火墙策略。建议可通过traceroute、tcpdump分析网络具体原因,如果您不确定,可以提工单协助排查。

另外您也可以尝试使用443端口去连接MQTT server。443在防火墙上默认情况被拦截几率小很多。(MQTT规范标准端口默认为1883。)