mqttx 无法保持长时间连接

[2023-08-23 16:38:29] [INFO] Message Arrived with topic: /sys/5374/ota/info
[2023-08-23 16:38:29] [INFO] OTA_TEST message arrived: message added “message_0443bf73-bf8b-4ebd-ac44-6ed5ffc66db5” and added to topic: “/sys/5374/ota/info”, payload: “OTA subscribe.” MQTT.js onMessageArrived trigger
[2023-08-23 16:39:16] [INFO] Message Arrived with topic: /sys/5374/device/token/update
[2023-08-23 16:39:16] [INFO] OTA_TEST message arrived: message added “message_434b4c1f-b9e7-40e7-8ca7-71f96d54446c” and added to topic: “/sys/5374/device/token/update”, payload: “C8C8F9A96600490ABE47EA020D19651E7B” MQTT.js onMessageArrived trigger
[2023-08-23 16:56:52] [ERROR] OTA_TEST connect fail, MQTT.js onError trigger, Error: read ECONNRESET
at TLSWrap.onStreamRead (internal/stream_base_commons.js:209:20)
[2023-08-23 16:56:52] [INFO] OTA_TEST connect close, MQTT.js onClose trigger
[2023-08-23 17:29:15] [INFO] MQTTX client with ID fa983bc9-fc64-4f1f-91c2-6b2ce9aa6c68 assigned
[2023-08-23 17:29:15] [INFO] Connect client OTA_TEST, MQTT/SSL connection: mqtts://iot-test.unito-tech.com:8883

多长时间会 ECONNRESET

有时候2小时,有时候40分钟,不稳定

是不是网络的原因

您好,

MQTTX 是基于 Electron 构建的,而 Electron 使用的是 Chromium 架构,因此与 Chrome 浏览器有相似行为。当 Electron 应用长时间不活跃或负载过高时,可能会出现资源优化,导致连接中断。此外,因为 Electron 默认在单线程上执行 JavaScript,某些高负载任务可能导致与 MQTT 服务器的连接丢失。这是一个我们已知的问题,具体可以参考:https://github.com/emqx/MQTTX/issues/1075。

为了解决这个问题,我们正在考虑使用 Web Worker 以在独立的线程中执行关键任务,从而避免此类中断。

如果有长时间连接的需求,可以使用 MQTTX 的 CLI 版本,Desktop 比较适合一些简单连接和消息处理的有 GUI 需求的场景。

我的体验是 mqtt over websocket 可以保持长链接。