目前开发的一个物联网项目,需要用小程序给物联网设备发消息
综合考虑下,决定使用MQTT协议进行开发
用npm安装
npm install mqtt --save
小程序使用Demo
// 在小程序中使用MQTT需要先安装必要的polyfill
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';
import 'esbuild-plugin-polyfill-node/polyfills/navigator';
const mqtt = require("mqtt");
// 连接MQTT代理服务器
const client = mqtt.connect("wxs://test.mosquitto.org", {
timerVariant: 'native' // 使用小程序原生定时器
});
// 监听连接事件
client.on('connect', function () {
console.log('已连接到MQTT服务器');
// 订阅主题
client.subscribe('presence', function (err) {
if (!err) {
// 发布消息
client.publish('presence', 'Hello mqtt from 微信小程序');
}
});
});
// 接收消息
client.on('message', function (topic, message) {
console.log('收到消息:', message.toString());
});配置说明
必要的Polyfill:
abortcontroller-polyfill:小程序环境缺少AbortController API
navigator的polyfill:MQTT.js在某些情况下会使用navigator对象
协议说明:
小程序中使用wxs://而非标准的wss://
这是小程序要求的WebSocket安全协议格式
timerVariant配置:
设置为’native’让MQTT.js使用小程序原生定时器
避免使用JavaScript定时器可能带来的问题
注意事项:
需要在小程序管理后台配置MQTT服务器域名
真机调试时需要开启调试模式(忽略域名校验)