diff --git a/app/src/main/mqtt-manager.js b/app/src/main/mqtt-manager.js index 05190f3..1f670a6 100644 --- a/app/src/main/mqtt-manager.js +++ b/app/src/main/mqtt-manager.js @@ -110,6 +110,9 @@ class MqttManager { password: '', keepAlive: 60, cleanSession: true, + connectTimeout: 10000, + reconnect: true, + reconnectInterval: 5000, status: 'disconnected', topics: [ { id: 'topic_default_001', topic: 'sensor/+/temperature', qos: 1, subscribed: false }, @@ -175,6 +178,9 @@ class MqttManager { password: config.password || '', keepAlive: config.keepAlive || 60, cleanSession: config.cleanSession !== false, + connectTimeout: config.connectTimeout ?? 10000, + reconnect: config.reconnect !== false, + reconnectInterval: config.reconnectInterval ?? 5000, status: 'disconnected', topics: [], }; @@ -205,6 +211,9 @@ class MqttManager { username: config.username || '', keepAlive: config.keepAlive || 60, cleanSession: config.cleanSession !== false, + connectTimeout: config.connectTimeout ?? server.connectTimeout ?? 10000, + reconnect: config.reconnect !== false, + reconnectInterval: config.reconnectInterval ?? server.reconnectInterval ?? 5000, }); if (config.password) { @@ -254,8 +263,8 @@ class MqttManager { password: server.password || undefined, keepalive: server.keepAlive, clean: server.cleanSession, - reconnectPeriod: 5000, - connectTimeout: 10000, + reconnectPeriod: 0, + connectTimeout: server.connectTimeout, }; try { @@ -265,6 +274,8 @@ class MqttManager { client.on('connect', () => { server.status = 'connected'; this.notify('status-change', { id, status: 'connected' }); + // 只在首次连接成功后,再根据配置启用自动重连 + client.options.reconnectPeriod = server.reconnect ? server.reconnectInterval : 0; // 自动订阅已有主题 server.topics.forEach((t) => { this._doSubscribe(id, t.topic, { qos: t.qos }); diff --git a/app/src/renderer/src/components/ServerModal.vue b/app/src/renderer/src/components/ServerModal.vue index 0051de7..48e7bf5 100644 --- a/app/src/renderer/src/components/ServerModal.vue +++ b/app/src/renderer/src/components/ServerModal.vue @@ -1,6 +1,6 @@