我用mqtt.js实现了一个客户端,并订阅了一些频道。在这里,如果订阅消息在30秒内没有出现,我想实现自动断开连接,但我不知道如何实现。如果KeepAlive设置为0,则不会引发PingRequest,但不会终止连接。我该怎么办?
let option = {
port: config.mqtt_port,
keepalive: 0,
};
mqtt.connect(config.mqtt_addr, option);
与keepalive: 0
连接告诉代理,他永远不会因为不活动而断开此客户端的连接,并且客户端根本没有发送ping。
使用keepalive: 20
,例如(broker在断开客户端连接之前等待1.5*保持活动(似乎也不是解决问题的方法,因为它要求您防止客户端发送ping以断开连接,并且显然是对keepalive
机制的可疑滥用
我建议只在客户端处理此问题,方法是使用一个计时器,该计时器在30秒后启动,调用mqtt.end()
以干净地断开客户端的连接,并且在onMessage回调中,计时器应该重新设置