环境信息
- EMQ X 版本:4.2.8
- 操作系统及版本:centos7
- 其他
问题描述
项目中使用 https://github.com/eclipse/paho.mqtt.golang v1.3.5作为客户端。但是发现当emq服务宕机并恢复后,客户端并没有发起重连,想问问以下两个问题:
1、客户端的配置SetKeepalive作用是什么?怎么实现的呢
2、是否有类似断线重连的最佳实践
谢谢各位!
项目中使用 https://github.com/eclipse/paho.mqtt.golang v1.3.5作为客户端。但是发现当emq服务宕机并恢复后,客户端并没有发起重连,想问问以下两个问题:
1、客户端的配置SetKeepalive作用是什么?怎么实现的呢
2、是否有类似断线重连的最佳实践
谢谢各位!
Keepalive是心跳超时时间,如果这段时间内emqx没有接收到客户端心跳包,就会认定客户端已经掉线
断线重连需要客户端根据自己的业务场景来设计,没有通用的最佳方案
谢谢回复。有个疑问是,作为客户端如何确认和服务端的链接已经断开呢?
我们代码是在main.go启动的时候,初始化了一个Mqtt.Client全局变量并订阅了主题,但是现在发现客户端无法接收到这个主题的信息,而程序没有抛出异常。并且在服务端上看客户端还是在线的。
这个看起来是客户端这边出现了半连接的情况,网络情况不好的时候,建议缩小KeepAlive的时间,然后客户端尽量捕获和处理socket异常
好的,我们调整了一下参数,加上增加了onConnect和onConnectionLost的处理逻辑后,解决了这个问题。