emqx / cloud-docs

EMQX Cloud Documentations
https://docs.emqx.com/en/cloud/latest/
9 stars 20 forks source link

emqx 设备断网未触发下线事件 #546

Open Wang-0122 opened 4 months ago

Wang-0122 commented 4 months ago

使用EMQX作为MQTT服务器

设备断网的情况会有很多,如果能满足这些就太好了!

Wang-0122 commented 4 months ago

image

断开设备网络以后,EMQX后台还是能看到客户端在线

luoyq0629 commented 4 months ago

如果是 tcp 连接断了马上就感知到了,没断的话会等心跳周期。

Wang-0122 commented 4 months ago

断网的情况下,我没有收到任何通知,你说的心跳周期是在服务端做什么编码逻辑嘛?

Wang-0122 commented 4 months ago

如果是 tcp 连接断了马上就感知到了,没断的话会等心跳周期。

断网的情况下,我没有收到任何通知,你说的心跳周期是在服务端做什么编码逻辑嘛?

luoyq0629 commented 4 months ago

keepalive 是约定的连接保活时间,emqx 要是在 1.5 * keepalive 时间(单位是秒)内没收到来自客户端的包,那么 emqx 就会断开连接。例如您的客户端 Keepalive 为 60 s,emqx 在 90 秒内没收到心跳,就会认为是异常的。可参阅:https://www.emqx.com/zh/blog/mqtt-keep-alive

Wang-0122 commented 4 months ago

keepalive 是约定的连接保活时间,emqx 要是在 1.5 * keepalive 时间(单位是秒)内没收到来自客户端的包,那么 emqx 就会断开连接。例如您的客户端 Keepalive 为 60 s,emqx 在 90 秒内没收到心跳,就会认为是异常的。可参阅:https://www.emqx.com/zh/blog/mqtt-keep-alive

image

好的,感谢答疑! 但是关于收到下线事件的时间我有点存疑 断网时间:2024-04-24 03:29:04.973 下线事件时间:2024-04-24 03:32:04.970 似乎已经超过了90秒

Wang-0122 commented 4 months ago

还想请教个问题,我通过MQTTX模拟设备连接上来,如果一直不主动上报数据,EMQX会有什么机制将设备剔除下线嘛?

luoyq0629 commented 4 months ago

一般来说如果在 keepalive * 1.5 保活期间如果没发任何包,EMQX 会主动断连的。另外您也可以根据实际业务调用 api 强行踢下线https://docs.emqx.com/zh/cloud/v4/api/clients.html#%E8%B8%A2%E9%99%A4%E5%AE%A2%E6%88%B7%E7%AB%AF

另外如果是 EMQX Cloud 问题,建议您可以提工单哈,能保证时效性。