【问题标题】:How to disconnect when there is no incoming data in MQTT.jsMQTT.js中没有传入数据时如何断开连接
【发布时间】:2021-01-05 07:23:22
【问题描述】:

我用 mqtt.js 实现了一个客户端并订阅了一些频道。 这里,如果订阅消息30秒没有进来,我想实现自动断开,但是不知道怎么做。 如果 KeepAlive 设置为 0,则不会抛出 PingRequest,但不会终止连接。我该怎么办?

   let option = {
      port: config.mqtt_port,
      keepalive: 0,
    };
    mqtt.connect(config.mqtt_addr, option); 

【问题讨论】:

  • 我正在使用蚊子经纪人
  • 也许您可以设置一个 if 语句并手动关闭它:mqtt.end()
  • keepalive 设置为零不会像您认为的那样做。阅读spec 第 3.1.2.10 节

标签: mqtt


【解决方案1】:

keepalive: 0 连接告诉代理他永远不会因为不活动而断开此客户端,并且客户端根本没有发送 ping。

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

我建议在客户端专门处理此问题,方法是使用在 30 秒后触发的计时器,其中调用 mqtt.end() 以彻底断开您的客户端,并在 onMessage 回调中重置计时器

【讨论】:

  • 我按照你说的做了计时器。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 2016-12-30
  • 2018-01-01
  • 2021-08-22
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多