Vue3实现mqtt的订阅与发布

什么是MQTT

MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布/订阅模式的通信协议,通常用于连接物联网设备和应用程序之间的通信。它最初由IBM开发,现在由OASIS(Organization for the Advancement of Structured Information Standards)进行标准化。
MQTT的工作原理:它采用发布/订阅模式,其中设备(称为客户端)可以发布消息到特定的主题(topics),而其他设备可以订阅这些主题以接收消息。这种模式使得通信非常灵活,因为发送者和接收者之间的耦合度很低。MQTT还支持负载消息(payload message)的传输,这意味着可以发送各种类型的数据,如传感器读数、控制指令等。

MQTT的轻量级设计使其在网络带宽和资源受限的环境中表现出色,因此在物联网应用中得到了广泛应用。它可以在低带宽、不稳定的网络环境下可靠地运行,同时保持较低的能耗。MQTT也有许多开源实现和客户端库,使得它在各种平台上都能方便地使用。

MQTT的优点

  • 轻量级和低带宽消耗: MQTT设计简单,协议头部小,有效地减少了网络带宽的使用,适合在带宽有限的网络环境中使用,尤其是在物联网设备和传感器等资源受限的场景下。
  • 异步通信: MQTT采用发布/订阅模式,实现了异步通信,发布者和订阅者之间解耦合,无需即时连接,消息的发送和接收是异步的,这种设计提供了更灵活的通信方式。
  • 可靠性: MQTT支持消息传输的可靠性。它提供了QoS(Quality of Service)级别,包括至多一次、至少一次和只有一次,以满足不同应用场景的需求。通过这些QoS级别,可以确保消息能够按照要求进行传输和接收。
  • 容易实现和部署: MQTT具有简单的设计和实现,有许多开源的实现和客户端库可供选择,可以方便地在各种平台和编程语言中使用。这使得MQTT在物联网应用中广泛应用,并且容易部署和集成到现有系统中。
  • 支持持久会话和遗嘱消息: MQTT支持客户端会话保持,即客户端断开连接后可以保持会话状态,同时支持遗嘱消息,即客户端异常断开连接时可以发送遗嘱消息给其他客户端。

什么是发布订阅模式

发布/订阅模式是一种消息传递范式,其中消息的发送者(发布者)和接收者(订阅者)之间是解耦的。在这种模式下,发布者将消息发送到一个特定的主题(topic),而订阅者则通过订阅这些主题来接收消息。

具体来说,发布者将消息发布到一个或多个主题,而订阅者则订阅一个或多个主题。当发布者发布消息到某个主题时,所有订阅了该主题的订阅者都会收到这条消息。这种模式使得消息的发送者和接收者之间没有直接的依赖关系,从而实现了松耦合的通信方式。

发布/订阅模式常用于分布式系统中,特别是在需要大规模消息传递的情况下,比如物联网应用、实时数据处理等。它提供了一种灵活、可扩展的方式来实现异步通信,同时允许多个订阅者同时接收相同的消息,从而满足了各种实时通信的需求。

MQTT在项目的运用

项目Vite和Vue版本

"vue": "^3.4.21"
"vite": "^5.2.0"

安装MQTT

npm i mqtt@5.5.2

引入MQTT文件

import mqtt from "mqtt"; // import namespace "mqtt"
import { onMounted } from 'vue'

MQTT的具体使用

<script setup>
import HelloWorld from "./components/HelloWorld.vue";
import mqtt from "mqtt"; // import namespace "mqtt"
import { onMounted } from "vue";

onMounted(() => {
  // 建立连接
  // 注意此出的网址开头要使用ws:而不是tcp:
  let client = mqtt.connect("ws://192.168.1.131:8083/mqtt", {
    username: "admin",  // 用户名字
    password: "3Ha86294",  // 密码
  });
  // 订阅主题
  client.subscribe("test1", (topic) => {
    console.log(topic);  // 此处打印出订阅的主题名称
  });
  
  // 推送消息
  client.publish("test2", JSON.stringify({one: '1', two: '2'})); 

  //接受消息
  client.on("message", (topic, data) => {
    // 这里有可能拿到的数据格式是Uint8Array格式,所以可以直接用toString转成字符串
    // let dataArr = JSON.parse(data.toString());
    console.log(data);
  });

  // 重连
  client.on("reconnect", (error) => {
    console.log("正在重连:", error);
  });

  // 错误回调
  client.on("error", (error) => {
    console.log("MQTT连接已关闭");
  });
});
</script>
Vue实现MQTT数据连接,可以使用mqtt.js库。以下是一个简单的示例代码: ```javascript <template> <div> <button @click="connect">连接</button> <button @click="disconnect">断开连接</button> <button @click="subscribe">订阅</button> <button @click="unsubscribe">取消订阅</button> <button @click="publish">发布</button> </div> </template> <script> import mqtt from 'mqtt' export default { data() { return { client: null, topic: 'test', message: 'Hello, MQTT!' } }, methods: { connect() { this.client = mqtt.connect('mqtt://localhost:1883') this.client.on('connect', () => { console.log('Connected') }) }, disconnect() { this.client.end() }, subscribe() { this.client.subscribe(this.topic, (err) => { if (!err) { console.log('Subscribed') } }) }, unsubscribe() { this.client.unsubscribe(this.topic, (err) => { if (!err) { console.log('Unsubscribed') } }) }, publish() { this.client.publish(this.topic, this.message, (err) => { if (!err) { console.log('Published') } }) } } } </script> ``` 在上面的代码中,我们首先导入了mqtt.js库,然后在data中定义了client、topic和message三个变量。在methods中,我们定义了connect、disconnect、subscribe、unsubscribe和publish五个方法,分别对应MQTT的连接、断开连接、订阅、取消订阅发布操作。在connect方法中,我们使用mqtt.connect方法连接到MQTT服务器,并在连接成功后输出Connected。在disconnect方法中,我们使用client.end方法断开连接。在subscribe和unsubscribe方法中,我们使用client.subscribe和client.unsubscribe方法进行订阅和取消订阅操作。在publish方法中,我们使用client.publish方法发布消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值