uniapp,微信小程序中使用 MQTT

最近在uniapp打包成微信小程序的项目中第一次用到了MQTT。使用比较简单,但是还是遇到了一些问题。在此记录一下。

官方文档:MQTT Github

官方MQTT测试工具:MQTTX。测试工具使用说明

MQTT的js文件:mqtt.min.js

 

先上一点注意事项:

(1) MQTT.js 一个 MQTT 协议的客户端库,用 JavaScript 编写,可用于 Node.js 和浏览器。在 Node.js 端可以通过全局安装使用命令行连接,同时还支持 MQTT ,MQTT TLS 证书连接;值得一提的是 MQTT.js 还对微信小程序有较好的支持。

(2) MQTT可以通过三种方式连接,TCP直连, TLS和WebSocket,但是JavaScript使用 TCP 只能通过 ws 即 Websocket 链接。所以如果服务器是TCP直连,客户端是肯定连不上的,会报 Error in connection establishment 的错误。所以客户端协议只能是ws,wss,wxs(微信)

(3) WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议。作为一种通信协议,其使用 ws(非加密)、wss(SSL 加密) 作为协议标识。MQTT.js 客户端支持多种协议,连接地址需指明协议类型;

(4) ws: 未加密的 WebSocket 连接,一般使用8083端口。wss: 加密的 WebSocket 连接,一般使用8084端口。mqtt: 未加密的 TCP 连接,一般使用1883端口。mqtts: 加密 TCP 连接。

 

贴一下代码:

import $mqtt from './mqtt.min.js';

const mqttOptions = { keepalive: 30, clean: false, connectTimeout: 5000, // Timeout clientId: uni.getStorageSync('clientId'), // username: 'test', // password: 'test', } const connectUrl = `${mqttHost}:${mqttPort}/mqtt`; // #ifdef H5 var client = $mqtt.connect('wss://' + connectUrl, mqttOptions); // #endif // #ifdef MP-WEIXIN||APP-PLUS var client = $mqtt.connect('wxs://' + connectUrl, mqttOptions); // #endif client.on('connect', () => { console.log('connect')
  // 这是为了给自己发条消息,其它无作用 client.subscribe('test', (err) => { if (!err) { client.publish('test', '{}') } }) }); // 自动重连 client.on('reconnect', (msg) => { console.log('reconnect', msg) }); // 错误 client.on('error', () => { console.log('error') }); // 断开 client.on('end', () => { console.log('end') }); // 掉线 client.on('offline', (msg) => { console.log('offline',msg) }); // 收到消息 client.on('message', (topic, message) => { // 把arrayBuffer转成字符串 let encodedString = String.fromCharCode.apply(null, new Uint8Array(message));// 全局发送消息  uni.$emit('sendTopicMsg',encodedString);
   console.log(encodedString) }) // 全局监听是否有关闭mqtt的消息的事件 uni.$on('closeMqtt',() => { client.end(true); // 主动断开连接 })

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspffd.html