Browse Source

优化mqtt代码问题

wangming 1 tháng trước cách đây
mục cha
commit
41f9a58274

+ 5 - 1
src/main.js

@@ -2,7 +2,7 @@ import Vue from 'vue'
 import App from './App'
 import './uni.promisify.adaptor'
 import {
-    createMqttClient
+    createMqttClient, createMqttData
 } from "./utils/globalMqtt";
 
 import {
@@ -32,7 +32,11 @@ function waitForUserId(callback) {
 waitForUserId((userId) => {
     const mqttClient = createMqttClient();
     Vue.prototype.$mqttClient = mqttClient;
+
+    const mqttClientData = createMqttData();
+    Vue.prototype.$mqttClientData = mqttClientData;
     uni.$emit("mqtt-ready", mqttClient);
+    uni.$emit("mqttData-ready", mqttClientData);
 });
 
 

+ 0 - 8
src/pages/home/home.vue

@@ -234,9 +234,6 @@ export default {
             });
         },
         getperSonInfo() {
-            uni.showLoading({
-                title: "查询中...",
-            });
             this.$http
                 .get("wap/home/homeInfo", {
                     userId: uni.getStorageSync("userId"),
@@ -249,7 +246,6 @@ export default {
                         this.warnNum = warnNum;
                         this.devDevice = res.data.data.deviceList;
                     }
-                    uni.hideLoading();
                 });
         },
         getShareNum() {
@@ -265,9 +261,6 @@ export default {
 
         // 异常信息处理
         getWarnList() {
-            uni.showLoading({
-                title: "查询中...",
-            });
             this.$http
                 .post(
                     "wap/stats/alarmEventsQuery",
@@ -288,7 +281,6 @@ export default {
                     if (res.data.data) {
                         this.alarmRetentionLists = res.data.data.rows;
                     }
-                    uni.hideLoading();
                 });
         },
         getwarmType() {

+ 52 - 21
src/pagesA/deviceDetail/deviceDetail.vue

@@ -1000,14 +1000,19 @@ export default {
 
         this.clientId = uni.getStorageSync("clientIDetail");
         console.log(this.clientId, "clientIDetail");
-        if (this.mqttData) {
-            this.mqttData.end(true);
-            this.mqttData = null;
-            console.log("页面 MQTT 已关闭");
-        }
-        this.mqttData = createMqttData(this.clientId);
-        if (this.mqttData) {
-            this.mqttData.on("message", (topic, message) => {
+
+        if (this.$mqttClientData) {
+            this.$mqttClientData.subscribe(
+                `/dev/${this.clientId}/tracker_targets`,
+                (err) => {
+                    if (err) console.error("DATA MQTT 订阅失败", err);
+                    else
+                        console.log(
+                            `DATA MQTT 订阅成功: /dev/${clientId}/tracker_targets`
+                        );
+                }
+            );
+            this.$mqttClientData.on("message", (topic, message) => {
                 console.log("topicDeviceDetail", topic, message);
                 const dataMatch = topic.match(/^\/dev\/(.+)\/tracker_targets$/);
                 const cmdMatch = topic.match(/^\/mps\/wx_(.+)\/notice$/);
@@ -1024,27 +1029,53 @@ export default {
                     this.$refs.alarmModel.hanOtherMessage(topic, message);
                 }
             });
+            console.log("开始接受mqttDATA消息111");
+        } else {
+            uni.$once("mqttClientData-ready", () => {
+                console.log("开始接受mqttDATA消息222");
+                this.$mqttClientData.subscribe(
+                    `/dev/${this.clientId}/tracker_targets`,
+                    (err) => {
+                        if (err) console.error("DATA MQTT 订阅失败", err);
+                        else
+                            console.log(
+                                `DATA MQTT 订阅成功: /dev/${clientId}/tracker_targets`
+                            );
+                    }
+                );
+                this.$mqttClientData.on("message", (topic, message) => {
+                    console.log("topicDeviceDetail", topic, message);
+                    const dataMatch = topic.match(
+                        /^\/dev\/(.+)\/tracker_targets$/
+                    );
+                    const cmdMatch = topic.match(/^\/mps\/wx_(.+)\/notice$/);
+                    if (dataMatch) {
+                        if (dataMatch[1] === this.clientId) {
+                            this.handleMessage(topic, message, this.clientId);
+                        }
+                    } else if (cmdMatch) {
+                        this.$refs.alarmModel.hanOtherMessage(topic, message);
+                    }
+                });
+            });
         }
     },
     onUnload() {
         this.inactivityTimer = null;
         this.autoPlayinterval = null;
-        if (this.mqttData) {
-            this.mqttData.end(true);
-            this.mqttData = null;
-            console.log("页面 MQTT1 已关闭");
-        }
+        this.$mqttClientData.unsubscribe(
+            `/dev/${this.clientId}/tracker_targets`,
+            (err) => {
+                if (err) console.error("取消订阅失败", err);
+                else
+                    console.log(
+                        `取消订阅成功: /dev/${this.clientId}/tracker_targets`
+                    );
+            }
+        );
     },
     onHide() {
         this.showModle = false;
-        // this.inactivityTimer = null;
-        // this.autoPlayinterval = null;
-        // this.showModle = false;
-        // if (this.mqttData) {
-        //     this.mqttData.end(true);
-        //     this.mqttData = null;
-        //     console.log("页面 MQTT2 已关闭");
-        // }
     },
     beforeDestroy() {
         console.log("组件销毁时调用");

+ 0 - 1
src/pagesA/devices/devices.vue

@@ -134,7 +134,6 @@ export default {
                     status: status,
                 })
                 .then((res) => {
-                    uni.hideLoading();
                     if (res.data.code == 200) {
                         let devs = res.data.data;
                         for (let i = 0; i < devs.length; i++) {

+ 11 - 105
src/utils/globalMqtt.js

@@ -13,7 +13,7 @@ export function createMqttClient() {
         return mqttClientCmd;
     }
     const params = {
-        keepalive: 60,
+        // keepalive: 60,
         clean: true,
         connectTimeout: 30 * 1000,
         clientId:
@@ -74,19 +74,19 @@ export function createMqttClient() {
 }
 
 // 创建data连接
-export function createMqttData(clientIdProp) {
-    if (!clientIdProp) {
-        console.warn("DATA MQTT 创建失败:缺少 clientIdProp");
+export function createMqttData() {
+    if (!uni.getStorageSync("userId")) {
+        console.warn("DATA MQTT 创建失败:缺少 userId");
         return null;
     }
 
     if (mqttDataConnected) return mqttClientData;
 
     const params = {
-        keepalive: 60,
+        // keepalive: 60,
         clean: true,
         connectTimeout: 1500,
-        clientId: "xcx_mqtt_data1_" + clientIdProp + "_" + Date.now(),
+        clientId: "xcx_mqtt_data1_" + uni.getStorageSync("userId") + "_" + Date.now(),
         username: "lnradar",
         password: "lnradar",
         WebSocket: function (url) {
@@ -108,10 +108,10 @@ export function createMqttData(clientIdProp) {
         mqttDataConnected = true;
     });
 
-    mqttClientData.subscribe(`/dev/${clientIdProp}/tracker_targets`, (err) => {
-        if (err) console.error("DATA MQTT 订阅失败", err);
-        else console.log(`DATA MQTT 订阅成功: /dev/${clientIdProp}/tracker_targets`);
-    });
+    // mqttClientData.subscribe(`/dev/${clientIdProp}/tracker_targets`, (err) => {
+    //     if (err) console.error("DATA MQTT 订阅失败", err);
+    //     else console.log(`DATA MQTT 订阅成功: /dev/${clientIdProp}/tracker_targets`);
+    // });
 
     mqttClientData.on("message", (topic, message) => {
         console.log("topic", topic, message);
@@ -133,98 +133,4 @@ export function createMqttData(clientIdProp) {
     // });
 
     return mqttClientData;
-}
-// export function createMqttData(clientIdProp) {
-//     if (!clientIdProp) {
-//         console.warn("DATA MQTT 创建失败:缺少 clientIdProp");
-//         return null;
-//     }
-
-//     // 如果已经连接,直接返回
-//     if (mqttDataConnected && mqttClientData) return mqttClientData;
-
-//     // 内部连接函数
-//     const connect = () => {
-//         const params = {
-//             keepalive: 60,
-//             clean: true,
-//             connectTimeout: 1500,
-//             clientId: "xcx_mqtt_data1_" + clientIdProp + "_" + Date.now(),
-//             username: "lnradar",
-//             password: "lnradar",
-//             WebSocket: function (url) {
-//                 return wx.connectSocket({
-//                     url: url,
-//                     header: { "content-type": "application/json" },
-//                     protocols: ["mqtt"],
-//                 });
-//             },
-//             reconnectPeriod: 0 // 手动重连
-//         };
-
-//         mqttClientData = mqtt.connect("wxs://data.radar-power.cn/mqtt/", params);
-
-//         mqttClientData.on("connect", () => {
-//             console.log("DATA MQTT 连接成功");
-//             mqttDataConnected = true;
-
-//             // 订阅 topic
-//             mqttClientData.subscribe(`/dev/${clientIdProp}/tracker_targets`, (err) => {
-//                 if (err) console.error("DATA MQTT 订阅失败", err);
-//                 else console.log(`DATA MQTT 订阅成功: /dev/${clientIdProp}/tracker_targets`);
-//             });
-
-//             // 清理重连定时器
-//             if (reconnectTimer) {
-//                 clearTimeout(reconnectTimer);
-//                 reconnectTimer = null;
-//             }
-//         });
-
-//         mqttClientData.on("message", (topic, message) => {
-//             console.log("topic", topic, message);
-//             try {
-//                 console.log("接收到消息:", JSON.parse(message.toString()));
-//             } catch (e) {
-//                 console.log("接收到非 JSON 消息:", message.toString());
-//             }
-//         });
-
-//         mqttClientData.on("error", (err) => {
-//             console.error("DATA MQTT 错误:", err);
-//             mqttDataConnected = false;
-//             scheduleReconnect();
-//         });
-
-//         mqttClientData.on("disconnect", () => {
-//             console.log("DATA MQTT 断开");
-//             mqttDataConnected = false;
-//             scheduleReconnect();
-//         });
-
-//         // 安全关闭方法
-//         mqttClientData.close = function (force = true) {
-//             if (mqttClientData) {
-//                 mqttClientData.end(force, () => {
-//                     mqttDataConnected = false;
-//                     console.log("DATA MQTT 已关闭");
-//                 });
-//             }
-//         };
-//     };
-
-//     // 内部重连调度
-//     const scheduleReconnect = () => {
-//         if (reconnectTimer) return; // 避免重复设置
-//         console.log("DATA MQTT 尝试重连中...");
-//         reconnectTimer = setTimeout(() => {
-//             reconnectTimer = null;
-//             connect();
-//         }, 1500); // 2 秒后重连
-//     };
-
-//     // 首次调用连接
-//     connect();
-
-//     return mqttClientData;
-// }
+}