Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Wang-0122 opened this issue Apr 23, 2024 · 8 comments
Open

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

Wang-0122 opened this issue Apr 23, 2024 · 8 comments

Comments

@Wang-0122
Copy link

使用EMQX作为MQTT服务器

  • 模拟器连接到EMQX服务,断开网络未触发下线事件
  • MQTTX 客户端断开网络也没有触发下线事件

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

@Wang-0122
Copy link
Author

image

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

@luoyq0629
Copy link
Member

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

@Wang-0122
Copy link
Author

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

@Wang-0122
Copy link
Author

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

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

@luoyq0629
Copy link
Member

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

@Wang-0122
Copy link
Author

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
Copy link
Author

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

@luoyq0629
Copy link
Member

一般来说如果在 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 问题,建议您可以提工单哈,能保证时效性。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants