VUE集成MQTT

该代码示例展示了如何在JavaScript中安装和使用mqtt.js库来连接MQTT服务器,处理连接、消息和重连事件。它还包含了发布和订阅主题的函数。

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

安装依赖

npm install mqtt@2.18.9 --save

代码集成

JS工具
mqtt-utils.js


import mqtt from "mqtt";

export default {
	MQTT_SERVER: "ws://XXXXXXX:8083/mqtt",//ws的端口是8083  TCP端口是1883
	MQTT_CONFIG: {
		username: "XXXX",
		password: "XXXXX",
		clientId: "WEB_01",
		keepAlive: 60,
		cleanSession: true,
		clear: true
	},
	mmClient: null,

	handleCon(clientId) {
		console.log('==handleCon==');
		this.mClient = mqtt.connect(this.MQTT_SERVER, this.MQTT_CONFIG);

		// mqtt连接
		this.mClient.on("connect", (e) => {
			console.log(e, "mqtt连接成功!");
			let topic1 = "device/+/send";
			// // let topic2 = "test2";
			let qos1 = 0;
			// // let qos2 = 0;
			// this.subTopic(this.mClient, [topic1, topic2], [qos1, qos2]);
			this.subTopic([topic1], [qos1]);

		});

		// 消息处理
		this.mClient.on("message", (topic, message) => {
			console.log("收到消息", topic, message);
			// let value = message.buffer
			var uint8_msg = new Uint8Array(message);
			var message = String.fromCharCode.apply(null, uint8_msg);
			console.log(message);
		})

		// 断线重连
		this.mClient.on("reconnect", (error) => {
			console.log("正在重连:", new Date().getTime(), error);
		})

		// 连接失败
		this.mClient.on("error", (err) => {
			console.log("mqtt连接失败!{}", err);
			this.mClient.end();
		})


	},

	/**
	 * 【通用】发布话题
	 *
	 * @param mClient
	 * @param topic
	 * @param qos
	 * @param msg
	 */

	pubTopic(topic, qos, msg) {
		console.log('=======pubTopic=====')
		this.mClient.publish(topic, msg, qos, err => {
			if (!err) {
				console.log("发布成功!");
			} else {
				console.log("发布失败!", err);
			}
		})
	},


	/**
	 * 【通用】订阅话题
	 *
	 * @param mClient
	 * @param topic
	 * @param qos
	 */
	subTopic(topic, qos) {
		this.mClient.subscribe(topic, qos, err => {
			if (!err) {
				console.log("订阅成功!");
			} else {
				console.log("订阅失败!", err);
			}
		})
	}
}

VUE页面集成

this.initMqtt();
MqttUtils.pubTopic("device/123456789/recive", 1, "123123");
### Vue集成MQTT实现即时通讯或对讲功能 在Vue项目中引入`mqtt`库可以方便地实现实时通信的功能。通过安装依赖包并配置连接参数,能够快速搭建起基于MQTT协议的消息传递机制。 #### 安装依赖 首先,在命令行工具里执行npm指令来获取必要的软件包: ```bash npm install mqtt --save ``` 此操作会下载[mqtt](https://www.npmjs.com/package/mqtt)[^1]模块到当前工程目录下,并将其记录于项目的package.json文件之中以便后续管理版本控制等问题。 #### 创建服务端订阅者组件 为了监听来自其他客户端发送过来的信息,可以在Vue应用内部创建一个新的JavaScript对象作为消息接收器。下面是一个简单的例子展示怎样定义这样一个类: ```javascript import { ref } from 'vue'; import mqtt from 'mqtt'; const client = mqtt.connect('ws://broker.hivemq.com:8000/mqtt'); // 连接到公共测试服务器[^2] client.on('connect', () => { console.log("Connected to MQTT broker"); }); export default function useMqttSubscriber(topicName){ const messages = ref([]); client.subscribe(topicName, (err) => { if (!err) { console.log(`Subscribed to topic ${topicName}`); } }); client.on('message', (topic, message) => { messages.value.push({topic,message}); }); return {messages}; } ``` 上述代码片段展示了如何建立与指定地址的WebSocket连接以及设置当成功接入后要采取的动作;同时注册了一个事件处理器用于处理接收到的新数据并将它们存储在一个响应式的数组内供视图层更新显示之用。 #### 构建前端发布者界面 为了让用户输入想要传输的内容并通过网络推送给目标设备/程序,则需设计相应的UI控件配合逻辑部分完成这项工作。这里给出一段简化版HTML模板加上对应的脚本说明具体做法: ```html <template> <div class="chat-box"> <ul v-for="(msg,index) in chatMessages" :key="index"> <li>{{ msg.topic }}: {{ msg.message }}</li> </ul> <input type="text" placeholder="Type your message here..." v-model="newMessage"/> <button @click="sendMessage">Send</button> </div> </template> <script setup lang="ts"> import {ref} from "vue"; import * as mqtt from "mqtt"; let newMessage = ref(''); let chatTopic = '/test/topic';// 自定义主题名称 let chatClient = mqtt.connect('wss://your-mqtt-broker-url'); function sendMessage(){ if(newMessage.value.trim().length>0){ chatClient.publish(chatTopic,newMessage.value,(error)=>{ if(error){console.error(error);} else{newMessage.value='';}// 清空输入框 }); } } // 使用前面定义好的useMqttSubscriber函数实例化聊天窗口的数据源 let {messages:chatMessages}=useMqttSubscriber(chatTopic); </script> ``` 这段示例不仅包含了表单元素让用户能键入待发文字外还实现了点击按钮触发实际推送行为的过程描述。另外值得注意的是这里再次调用了之前提到过的`useMqttSubscriber()`方法从而确保双方都能看到最新的交流记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值