【uni-app】uniapp中微信小程序APP使用mqtt(vue同理)

本文介绍了如何在Vue网页和微信小程序中利用mqtt.min.js实现MQTT连接、订阅和消息处理,包括步骤、代码示例和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

❤ 写在前面

如果觉得对你有帮助的话,点个小❤❤ 吧,你的支持是对我最大的鼓励~
个人独立开发wx小程序:AI私厨,需要使用wx打开,感谢支持!



❤前言

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。


❤第一步

引入mqtt.min.js
小程序APP mqtt.min.js下载地址:下载地址

vue网页,可直接使用npm安装即可

 npm i mqtt@3.0.0 --save

❤第二步

连接mqtt

// import mqtt from 'mqtt' //vue网页这样引入
let mqtt = require('../common/js/mqtt.min.js')  //js地址
//小程序要以wx开头,上线正式版要配置wxs,就是类似https
let mqttUrl = 'wx://127.0.0.1:8083/mqtt'  //这是mqtt的访问地址,要以/mqtt结束
let options = {
	clean: true, // 是否清除会话
	connectTimeout: 4000,
	resubscribe: true, 
	username: userName,
	password: '',
	//qos:0 ===>发送者只发送一次消息,不进行重试,Broker不会返回确认消息
	//qos:1 ===>发送者最少发送一次消息,确保消息到达Broker,Broker需要返回确认消息PUBACK
	//qos:2 ===>使用两阶段确认来保证消息的不丢失和不重复
	//不懂的话,参考这个网址:https://blog.youkuaiyun.com/yangguosb/article/details/78653228
	qos: 1, 
}
options['url'] = mqttUrl
options['clientId'] = '12345678' // $uuid.uuid(8, 16),clientId不允许重复,我是使用的uuid
console.log(options);

let client = mqtt.connect(options.url, options)
client.on('connect', function() {
	console.log('====连接成功====');
	
	let list = ['app/alarm/1','app/alarm/2'] //这是订阅的主题名
	//订阅多个主题
	client.subscribe(list, {
		qos: 1
	}, err => {
		console.log(err || '订阅成功');
	});
})

//mqtt离线
client.on('offline', function() {
	console.log('offline')
})

//mqtt接收到信息
client.on('message', function(topic, message) {
	let msg = JSON.parse(message.toString())
	console.log(msg, '===信息===');
})

//mqtt连接失败
client.on('error', (err) => {
	console.log('error', err)
})

还有一个就是关闭mqtt

client.end()

❤ 总结

Thanks♪(・ω・)ノ,到此就结束了,有什么问题都可以问!
欢迎评论 / 私信我~

### UniApp 开发微信小程序 MQTT 协议集成教程 #### 1. 安装依赖库 为了在 UniApp 中集成 MQTT 协议,可以使用 `mqtt.js` 库作为基础工具。通过 npm 或手动下载的方式引入该库。 安装命令如下: ```bash npm install mqtt --save ``` 随后,在项目中创建一个文件夹用于存储自定义的 MQTT 工具类,例如 `/common/utils/mqtt.js` 文件[^1]。 --- #### 2. 创建 MQTT 连接管理器 以下是基于 `mqtt.js` 的连接管理器实现: ```javascript // common/utils/mqtt.js import mqtt from 'mqtt'; let client = null; export default { connect(url, options) { if (!client || !client.connected) { client = mqtt.connect(url, options); } return new Promise((resolve, reject) => { client.on('connect', () => resolve(client)); client.on('error', (err) => reject(err)); }); }, subscribe(topic, qos, callback) { if (client && client.connected) { client.subscribe(topic, { qos }, (err) => { if (err) console.error(`Subscribe error: ${err}`); else if (callback) callback(); }); } }, publish(topic, message, options) { if (client && client.connected) { client.publish(topic, message, options, (err) => { if (err) console.error(`Publish error: ${err}`); }); } }, onMessage(callback) { if (client && client.connected) { client.on('message', (topic, payload) => { callback(topic, payload.toString()); }); } }, }; ``` 此模块提供了基本功能:连接、订阅、发布以及接收消息处理[^1]。 --- #### 3. 设置 WebSocket URL 地址 由于不同平台(H5 和小程序)使用的 WebSocket 方案有所不同,需针对环境动态设置地址。 对于 H5 平台,通常采用标准 WebSockets (`wss`);而对于微信小程序,则需要使用专属前缀 `wxs` 来适配其网络层特性[^2]。 代码示例: ```javascript // pages/index/index.vue <script> import mqtt from '@/common/utils/mqtt.js'; export default { data() { return {}; }, onLoad(options) { let url; // 动态判断运行环境 // #ifdef H5 url = 'wss://broker.example.com:8888/mqtt'; // #endif // #ifdef MP-WEIXIN url = 'wxs://broker.example.com:8888/mqtt'; // #endif const options = { clientId: 'unique_client_id_' + Math.random().toString(36).substr(2), username: '', // 如果有认证需求填写用户名 password: '' // 密码同理 }; mqtt.connect(url, options) .then(() => { console.log('Connected to broker'); mqtt.subscribe('$SYS/brokers/+/clients/#', 0, this.receiveCallback); }) .catch((err) => { console.error('Connection failed:', err.message); }); }, methods: { receiveCallback() { console.log('Subscription successful!'); } } } </script> ``` 在此部分实现了根据当前运行环境自动切换 WebSocket URL,并完成客户端初始化与主题订阅操作[^2]。 --- #### 4. 处理消息回调 当服务器推送数据到已订阅的主题时,可以通过监听事件获取最新内容并更新界面状态。 扩展前面的例子来展示如何捕获新消息: ```javascript methods: { initMqttListener() { mqtt.onMessage((topic, message) => { console.log(`Received Message - Topic:${topic}, Payload:${message}`); // 更新 UI 数据或其他逻辑... }); } }, onLoad() { ... this.initMqttListener(); // 添加消息监听函数调用 } ``` 这样便能实时响应来自 Broker 的通知[^1]。 --- #### 总结 以上介绍了完整的 uni-app 微信小程序MQTT 集成流程,涵盖了从配置到实际应用各环节要点。开发者可根据具体业务场景调整参数设定或者优化架构设计以满足更高性能要求。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JS Lover

我会尽最大努力分享更多开发经验

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值