微信小程序连接mqtt指南

文件引入

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
喜欢就支持一下吧
点赞0 分享