构建 Vue 项目中的 MQTT 集成:实现实时消息传递

构建 Vue 项目中的 MQTT 集成:实现实时消息传递缩略图
本文目录
  1. 1. 项目初始化
  2. 2. MQTT 的使用
  3. 3. 连接 MQTT 服务器
  4. 4. 订阅主题
  5. 5. 取消订阅
  6. 6. 消息发布
  7. 7. 断开连接
  8. 8. 测试

Vue.js,通常简称为 Vue,是一款流行的JavaScript前端框架,由尤雨溪(Evan You)及其团队开发和维护。Vue以其简单、灵活、高效的特点而备受开发者欢迎,它专注于实现UI层的构建和交互,为构建现代Web应用提供了有力的工具和资源。它以其数据双向绑定、组件化、响应式和轻量等特点而著称。搭配 Vue CLI 脚手架工具,使开发者更容易入门,大大降低了学习成本。此外,Vue 还配备了一个专用的状态管理模式 Vuex,可以帮助您集中管理应用程序的状态。

MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议。它提供了一对多的消息分发和应用程序解耦的能力,拥有小型传输开销、协议数据交换的能力以及三种不同的消息服务质量等级,以满足不同的消息传递需求。

本文将重点介绍如何在 Vue 项目中使用 MQTT 来实现客户端与 MQTT 服务器之间的连接、订阅、消息收发和取消订阅等功能。

项目初始化

首先,我们需要创建一个新的 Vue 项目。您可以选择使用 Vue CLI 创建项目,也可以通过引入 Vue.js 创建项目。以下是使用 Vue CLI 创建项目的示例:

vue create vue-mqtt-test

接下来,我们需要安装 MQTT 客户端库。安装方式有多种选择,您可以通过命令行使用 npm 或 yarn 安装,也可以通过 CDN 引入。以下是通过命令行安装的示例:

npm install mqtt --save

yarn add mqtt

这将帮助我们轻松引入 MQTT 客户端库。

MQTT 的使用

连接 MQTT 服务器

在本文中,我们将使用由 EMQX 提供的免费公共 MQTT 服务器。以下是服务器连接信息:

  • Broker: broker.emqx.io
  • TCP 端口: 1883
  • WebSocket 端口: 8083
  • WebSocket Secure 端口: 8084

接下来是连接关键代码示例:

<script>
import mqtt from "mqtt";

export default {
  data() {
    return {
      connection: {
        protocol: "ws",
        host: "broker.emqx.io",
        port: 8083,
        endpoint: "/mqtt",
        clean: true,
        connectTimeout: 30 * 1000,
        reconnectPeriod: 4000,
        clientId: "emqx_vue_" + Math.random().toString(16).substring(2, 8),
        username: "emqx_test",
        password: "emqx_test",
      },
      // ... 其他数据
    };
  },
  methods: {
    initData() {
      // 初始化数据
    },
    handleOnReConnect() {
      // 处理重新连接
    },
    createConnection() {
      // 创建连接
    },
  },
};
</script>

订阅主题

在 MQTT 中,订阅主题是一项常见的操作。下面是订阅主题的示例代码:

methods: {
  // ... 其他方法

  doSubscribe() {
    const { topic, qos } = this.subscription;
    this.client.subscribe(topic, { qos }, (error, res) => {
      if (error) {
        console.log('Subscribe to topics error', error);
        return;
      }
      this.subscribeSuccess = true;
      console.log('Subscribe to topics res', res);
    });
  },
  // ... 其他方法
},

取消订阅

取消订阅也是一项重要的操作。以下是取消订阅的示例代码:

methods: {
  // ... 其他方法

  doUnSubscribe() {
    const { topic } = this.subscription;
    this.client.unsubscribe(topic, error => {
      if (error) {
        console.log('Unsubscribe error', error);
      }
    });
  },
  // ... 其他方法
},

消息发布

发布消息是与 MQTT 服务器进行通信的关键操作之一。以下是发布消息的示例代码:

methods: {
  // ... 其他方法

  doPublish() {
    const { topic, qos, payload } = this.publish;
    this.client.publish(topic, payload, { qos }, error => {
      if (error) {
        console.log('Publish error', error);
      }
    });
  },
  // ... 其他方法
},

断开连接

最后,当不再需要连接 MQTT 服务器时,应该执行断开连接操作。以下是断开连接的示例代码:

methods: {
  // ... 其他方法

  destroyConnection() {
    if (this.client.connected) {
      try {
        this.client.end(false, () => {
          this.initData();
          console.log('Successfully disconnected!');
        });
      } catch (error) {
        console.log('Disconnect failed', error.toString());
      }
    }
  },
  // ... 其他方法
},

测试

我们已经使用 Vue 编写了一个简单的浏览器应用,该应用具备创建连接、订阅主题、收发消息、取消订阅和断开连接等功能。您可以在 GitHub 上找到完整的项目代码:GitHub 项目链接

在测试过程中,您可以使用 MQTT 5.0 客户端工具 - MQTTX 作为另一个客户端来进行消息收发测试。

通过这个示例,我们演示了如何在 Vue 项目中创建 MQTT 连接,并模拟了客户端与 MQTT 服务器之间的订阅、消息发布和取消订阅等场景。

总结

Vue 是一款强大的前端框架,与 MQTT 协议结合使用可以实现各种有趣的应用。无论是浏览器端还是移动端,Vue 都可以帮助您开发出高效的

应用程序。希望本文能够帮助您更好地理解如何在 Vue 项目中使用 MQTT,以及如何利用这种组合来构建更多有趣和实用的物联网应用。

技术术语(共 9 个)—— 点击展开
MQTT轻量级物联网消息传输协议,基于发布/订阅模式,适合低带宽不稳定网络
MQTT 5.0MQTT 协议新版本,新增属性、原因码、共享订阅与流量控制
BrokerMQTT 代理服务器,负责接收发布消息并分发给订阅者
EMQX开源 MQTT Broker,常用于物联网海量连接与集群场景
QoS服务质量等级,0 最多一次 / 1 至少一次 / 2 恰好一次
TopicMQTT 主题,消息路由的层级字符串,支持通配符 + 与 #
订阅客户端向 Broker 注册感兴趣的主题以接收消息
发布客户端向指定主题发送消息
WebSocket浏览器与 Broker 通过 ws/wss 传输 MQTT 的通道
来源/工具信息 —— 点击展开
来源 MQTT中文网(mqtt.cn) —— 国内领先的MQTT通信协议技术社区 分类 MQTT 教程 字数 2507 字 · 阅读约 7 分钟 更新 2023-09-11 永久链接 https://www.mqtt.cn/587.html
推荐工具:MQTT调试助手 微信小程序
MQTT中文网官方推出的MQTT调试工具,支持 MQTT 3.1.1/5.0 实时连接调试、主题订阅、消息收发监控与报文分析。 无需安装,微信搜索「MQTT调试助手」即可使用。 电脑端入口:https://www.mqtt.cn/mqtttool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 mqtt.cn
相关标签
📝 作者声明
本文由 MQTT中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口