mirror of
https://gitee.com/beecue/fastbee.git
synced 2025-12-18 00:45:55 +08:00
mqtt优化
This commit is contained in:
140
vue/src/utils/mqttTool.js
Normal file
140
vue/src/utils/mqttTool.js
Normal file
@@ -0,0 +1,140 @@
|
||||
import mqtt from 'mqtt'
|
||||
import { getToken } from "@/utils/auth";
|
||||
|
||||
let mqttTool = {
|
||||
client: null,
|
||||
}
|
||||
|
||||
/** 连接Mqtt */
|
||||
mqttTool.connect = function () {
|
||||
let options = {
|
||||
username: "wumei-smart",
|
||||
password: getToken(),
|
||||
cleanSession: true,
|
||||
keepAlive: 30,
|
||||
clientId: 'web-' + Math.random().toString(16).substr(2),
|
||||
connectTimeout: 10000
|
||||
}
|
||||
// 配置Mqtt地址
|
||||
// let url = "ws://" + window.location.hostname + ":8083/mqtt";
|
||||
console.log("mqtt地址:", process.env.VUE_APP_EMQX_SERVER_URL);
|
||||
mqttTool.client = mqtt.connect(process.env.VUE_APP_EMQX_SERVER_URL, options);
|
||||
mqttTool.client.on("connect", (e) => {
|
||||
console.log('mqtt连接成功');
|
||||
});
|
||||
// 重新连接
|
||||
mqttTool.client.on('reconnect', (error) => {
|
||||
console.log('正在重连:', error)
|
||||
});
|
||||
// 发生错误
|
||||
mqttTool.client.on('error', (error) => {
|
||||
console.log('Mqtt客户端连接失败:', error)
|
||||
mqttTool.client.end();
|
||||
})
|
||||
// 断开连接
|
||||
mqttTool.client.on('close', function (res) {
|
||||
console.log('已断开Mqtt连接');
|
||||
});
|
||||
}
|
||||
/** 断开连接 */
|
||||
mqttTool.end = function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (mqttTool.client == null) {
|
||||
resolve('未连接')
|
||||
console.log("未连接")
|
||||
return;
|
||||
}
|
||||
mqttTool.client.end()
|
||||
mqttTool.client = null
|
||||
console.log('Mqtt服务器已断开连接!');
|
||||
resolve('连接终止')
|
||||
})
|
||||
}
|
||||
/** 重新连接 */
|
||||
mqttTool.reconnect = function () {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (mqttTool.client == null) {
|
||||
// 调用resolve方法,Promise变为操作成功状态(fulfilled)
|
||||
resolve('未连接')
|
||||
console.log("未连接")
|
||||
return;
|
||||
}
|
||||
console.log('正在重连...', res);
|
||||
mqttTool.client.reconnect()
|
||||
})
|
||||
}
|
||||
/** 消息订阅 */
|
||||
mqttTool.subscribe = function (topics) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (mqttTool.client == null) {
|
||||
resolve('未连接')
|
||||
console.log("未连接")
|
||||
uni.showToast({
|
||||
icon: 'none',
|
||||
title: 'mqtt未连接',
|
||||
});
|
||||
return;
|
||||
}
|
||||
mqttTool.client.subscribe(topics, {
|
||||
qos: 1
|
||||
}, function (err, res) {
|
||||
console.log("订阅主题:", topics);
|
||||
if (!err && res.length > 0) {
|
||||
console.log("订阅成功")
|
||||
resolve('订阅成功')
|
||||
} else {
|
||||
console.log("订阅失败,主题可能已经订阅")
|
||||
resolve('订阅失败')
|
||||
return;
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
/** 取消订阅 */
|
||||
mqttTool.unsubscribe = function (topics) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (mqttTool.client == null) {
|
||||
resolve('未连接')
|
||||
console.log("未连接")
|
||||
return;
|
||||
}
|
||||
mqttTool.client.unsubscribe(topics, function (err) {
|
||||
if (!err) {
|
||||
resolve('取消订阅成功')
|
||||
console.log("取消订阅成功")
|
||||
} else {
|
||||
resolve('取消订阅失败')
|
||||
console.log("取消订阅失败")
|
||||
return;
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
mqttTool.publish = function (topic, message, name) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (mqttTool.client == null) {
|
||||
resolve('Mqtt客户端未连接')
|
||||
console.log("Mqtt客户端未连接")
|
||||
return;
|
||||
}
|
||||
mqttTool.client.publish(topic, message, { qos: 1 }, function (err) {
|
||||
console.log('发送主题:', topic);
|
||||
console.log('发送内容:', message);
|
||||
if (!err) {
|
||||
if (topic.indexOf('offline') > 0) {
|
||||
console.log("[ " + name + " ] 影子指令发送成功");
|
||||
resolve("[ " + name + " ] 影子指令发送成功");
|
||||
} else {
|
||||
console.log("[ " + name + " ] 指令发送成功");
|
||||
resolve("[ " + name + " ] 指令发送成功");
|
||||
}
|
||||
} else {
|
||||
console.log("[ " + name + " ] 指令发送失败");
|
||||
reject("[ " + name + " ] 指令发送失败");
|
||||
return;
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export default mqttTool
|
||||
Reference in New Issue
Block a user