一、MQTT概念
MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP的基础上,由IBM在1999年发布。它最大的优点是以极少的代码和有限的带宽,为连接远程设备提供可靠的消息服务。作为一种低开奥、低带宽占用的及时通讯协议,使其在物联网、小型设备、移动应用等方面有广泛的应用。
二、小程序创建MQTT连接
1.在小程序的util包中引入mqtt.js与mqtt.min.js也可以只导入mqtt.min.js单包
mqtt.js包下载链接:mqtt.js
mqtt.min.js包下载链接:mqtt.min.js
2.在utlis中创建mqtt连接的公共方法:
可在微信小程序中实例化该公共方法做到随取随用
// 获取应用实例
const app = getApp()
var mqtt = require('../utils/mqtt.min.js') //根据自己存放的路径修改
var mqtt_connect = {
connection: function () {
/**存储于app.js中的全局变量*/
const { username } = app.globalData;//mqtt连接的用户名
const { password } = app.globalData;//mqtt连接的密码
const { reconnectPeriod } = app.globalData;//接收到的信息
const { connectTimeout } = app.globalData;//重连时间
const { host } = app.globalData;//连接地址
try {
// that.setValue("conenctBtnText", "连接中...");
const clientId = new Date().getTime();//mqtt的连接ID
app.globalData.client = mqtt.connect(`wxs://${host}/mqtt`, {
username,
password,
reconnectPeriod,
connectTimeout,
clientId,
});
//注释部分的内容为mqtt连接状态监听,可根据自己的需求进行开启
// app.globalData.client.on("connect", () => {
// app.globalData.client.on("error", (error) => {
// console.log("onError", error);
// });
// app.globalData.client.on("reconnect", () => {
// console.log("reconnecting...");
// });
// app.globalData.client.on("offline", () => {
// console.log("Offline");
// });
// });
} catch (error) {
console.log("mqtt.connect error", error);
}
},
/**关闭MQTT连接 */
onConnectionLost() {
app.globalData.client.end = (responseObject) => {
console.log("mqtt连接关闭!");
}
},
/**
* 接收信息的方法
*/
getMessage() {
app.globalData.client.on("message", (topic, payload) => {
// console.log(`收到消息 - Topic: ${topic},Payload: ${payload}`)
app.globalData.currMsg = JSON.parse(payload);
console.log(typeof payload)
});
},
/**
* 订阅主题
*/
subscribe(subTopic) {
if (app.globalData.client) {
app.globalData.client.subscribe(subTopic)
return
}
},
/**
* 取消订阅
*/
unsubscribe(subTopic) {
if (app.globalData.client) {
app.globalData.client.unsubscribe(subTopic)
wx.showModal({
content: `成功取消订阅主题:${subTopic}`,
showCancel: false,
})
return
}
},
/**
* 发布信息
*/
publish(pubTopic, pubMsg) {
console.log('发送mqtt')
if (app.globalData.client) {
app.globalData.client.publish(pubTopic, pubMsg)
return
}
},
}
//导出MQTT连接的方法
module.exports = {
mqtt_connect: mqtt_connect
}
app.js中的内容:
// app.js
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
},
globalData: {
client: null,//mqtt连接对象
host: "",//连接的服务器域名地址
username: "test",//连接的用户名
password: "test",//连接的密码
subTopic: "",//订阅的Topic
pubTopic: "",//发布信息的Topic
pubMsg: "Hello World",//发布的信息
receivedMsg: "",//收到的信息
currMsg: "",//当前信息
mqttStatus: 0,//判断mqtt的连接状态
// reconnectPeriod: 1000, // 1000毫秒,设置为 0 禁用自动重连,两次重新连接之间的间隔时间
// connectTimeout: 30 * 1000, // 30秒,连接超时时间
}
})