调用 setKeepAlive() 设置心跳包后,心跳可以正常收发
此时断开网络出现如下情况
明显出现还未超时就重启了超时定时器,查看源码如下:
void QMQTT::ClientPrivate::onTimerPingReq()
{
if (!isConnectedToHost())
return;
Frame frame(PINGREQ);
sendFrame(frame);
_pingResponseTimer.start(); // 直接就重启了定时器永远不会超时
}
在启动超时定时器时判断定时器是否活动,处于非活动状态才能启动,修改代码如下:
void QMQTT::ClientPrivate::onTimerPingReq()
{
if (!isConnectedToHost())
return;
Frame frame(PINGREQ);
sendFrame(frame);
if(!_pingResponseTimer.isActive()) {
_pingResponseTimer.start();
}
}
修改完后编译测试可正常超时断连。