MQTT.js中没有传入数据时如何断开连接

How to disconnect when there is no incoming data in MQTT.js

我用 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 例如(经纪人在断开客户端之前等待 1.5 * keepalive)似乎也不是去这里的方法,因为它要求您阻止您的客户端发送 ping 以断开连接,并且显然是对 keepalive 机制的可疑滥用

我建议在客户端专门处理这个问题,方法是使用一个计时器,该计时器在 30 秒后触发,其中调用 mqtt.end() 以完全断开您的客户端,并且在 onMessage 回调中计时器应该被重置