项目中用到mqtt,有个led灯想指示下mqtt的连接状态。
qt5+qmqtt库,连上网络后拔掉网线,没有触发disconnect和error信号,isConnectedToHost()返回的也是true。
先拔掉网线再运行程序,就可以触发error()信号,isConnectedToHost()返回也是false。
请教,如何检测mqtt的连接状态?
离线
心跳包?没有收到回复就认为断开链接了
离线
用的emqx的qmqtt程序,setKeepAlive(30),这样算是设置成30秒心跳包了吧?
我是在定时器里每5秒调用isConnectedToHost()函数。
测试结果,有时候拔掉网线后,四五十秒左右返回false,有时候则不行,过了几分钟仍返回true。
-------------------------------------------
如果放的足够久,还是可以返回false的,就是太久了,好几分钟...
感觉是不是我心跳包没设置好?
最近编辑记录 Gentlepig (2023-08-05 11:07:42)
离线
@Gentlepig
我看mqtt不是有报文pingreq和pingresp吗
你发送pingreq,没接收到pingresp就判断网络有问题。
离线
@Gentlepig
我看mqtt不是有报文pingreq和pingresp吗
你发送pingreq,没接收到pingresp就判断网络有问题。
谢谢,确实有pingresp信号,不过本来设计的是三五分钟通讯一次,这样的话,就变成比较频繁的通讯了。
暂时放弃了led指示mqtt连接状态的想法。
离线