文件引入
mqtt.js cdn: unpkg.com/mqtt@3.0.0/…
文件放在小程序目录下,然后引入mqtt
var mqtt = require('./utils/mqtt')
复制代码
初始化文件
开发环境可以用ws协议,正式环境中必须使用wss协议。
let url = wx://xxxxxxx.cn:8084/mqtt
let client = mqtt.connect(url, {
clientId: 'wqs' + date, // 客户端id
username: 'web', // 用户名
password: 'Web2020qaz', // 密码
// 端口写在url里面也可以,写在配置项里也可以
port: 8084 // 端口
})
this.globalData.client = client
复制代码
在小程序app.js文件中定义一个全局变量,用来保存mqtt连接
globalData: {
client: null
}
复制代码
监听mqtt各个阶段事件,正常情况下,首次连接会进入连接成功的回调,如有特殊情况发生客户端离线,则会重新连接
client.on('connect', (e) => {
console.log("连接成功")
})
client.on('error', (error) => {
console.log("客户端发生错误:error = ", error);
});
client.on('reconnect', () => {
console.log("发生重新连接!");
});
client.on('offline', () => {
console.log("客户端离线!");
});
复制代码
监听订阅消息
发布消息
client.publish('123', 'Hello mqtt')
复制代码
订阅消息
client.subscribe(`具体主题地址`, {
qos: 0
}, (err) => {
if (!err) {
console.log("订阅成功")
}
})
复制代码
监听消息接收,topic
为主题消息地址,message
为该主题订阅的消息内容,message
需要是JSON
格式的话,需要转换一下数据格式const data = JSON.parse(message.toString())
client.on('message', (topic, message) => {
this.handleMeeage(topic, message)
})
复制代码
安卓和IOS的兼容问题
在ios环境下,地址wx://xxxxxxx.cn:8084/mqtt
能够正常收发消息,在在安卓环境下连接失败,查阅了很多资料之后发现,需要把端口代理到默认端口,改为wx://xxxxxxx.cn/mqtt
,安卓能够正常运行。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END