var mqtt = require('mqtt') var MqttClient= mqtt.connect('mqtt://test.mosquitto.org') const linkList = [] // 長連接的列表 MqttClient.linkState = true // 這里是自定義的長連接狀態 // 連接成功 MqttClient.on("connect", () => { MqttClient.linkState = true // 改變連接狀態 const linkArr = Object.values(MqttClient.messageIdToTopic) linkList.forEach(item => { if(!linkArr.includes(item)) { MqttClient.subscribe(item) } }) }) // 鏈接報錯 MqttClient.on("error", () => { MqttClient.linkState = false }) // 鏈接斷開 MqttClient.on("close", () => { MqttClient.linkState = false }) // 添加主題 export function AddLink(link){ // 當連接中 直接訂閱 if(MqttClient.linkState) { MqttClient.subscribe(link) } // 簡單地去重 if(!linkList.includes(link)) linkList.push(link) } // 刪除取消主題 export function DeleteLink(arr) { arr.forEach(item => { const key = linkList.findIndex(link => link === item) if(key >= 0) { linkList.splice(key,1) MqttClient.unsubscribe(item) } }) } // 回調消息 export function MyMqttMsg(Callback) { MqttClient.on("message", (topic, res) => { Callback(JSON.parse(res)) }) }