Wizzercn / MqttWk

Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发(有群友实现了130万在线)
Apache License 2.0
635 stars 229 forks source link

在使用org.eclipse.paho.client.mqttv3进行qos1级别消息发送时,接收客户端会出现由于会话过期而导致的链接断开 #19

Closed amose-fire closed 2 years ago

amose-fire commented 3 years ago

原因:在mqttv3客户端源码中,org.eclipse.paho.client.mqttv3.internal.ClientState#checkForActivity这个方法中会判断是否需要发送心跳。 其中有个变量lastInboundActivity会随着puback的发送而改变。这个变量会推迟心跳发送的时机。从而导致一个只接受消息而不发送消息的客户端在下次发送心跳的时间间隔会超过你设定的keepAlive*1.5的大小

建议在PubAck处理方法中添加对session的过期时间处理

Wizzercn commented 2 years ago

嗯,最新版代码应该已经修复了。