【MQTT】VUE集成MQTT

写在前面的话:

        计划梳理MQTT集成至Java、Vue的系列文档,详见收录专栏。

        该示例文章,已将相关方法封装至工具类。

--再长的路,一步步也能走完


目录

一、前情提要

二、安装依赖

三、代码集成

1、JS工具类准备

2、VUE页面集成

2.1 引用MQTT 及 工具

2.2 编写mqtt配置变量

2.3 建立连接及订阅

2.4 发布相关代码

2.5 VUE完整代码

四、基于MQTTX,联调测试

1、测试VUE项目sub

2、测试VUE项目pub


一、前情提要

【MQTT】Linux(CentOS 7.5):通过docker安装MQTT_Francis X的博客-CSDN博客

【MQTT】Windows:安装MQTT_Francis X的博客-CSDN博客

【MQTT】SpringBoot集成MQTT_Francis X的博客-CSDN博客

二、安装依赖

npm install mqtt@2.18.9 --save

三、代码集成

1、JS工具类准备

/*******************************************************************************
 * mqtt工具类
 *
 * 说明:该工具类,当前已集成如下方法:
 *    1、通用pub
 *    2、通用sub
 *
 * 若要查阅相关工具类,建议先折叠方法内部代码
 *
 * @author Francis
 * @since 2022-10-09 17:14
 * @version v1.0
 *******************************************************************************/
/**
 * 【通用】发布话题
 *
 * @param client
 * @param topic
 * @param qos
 * @param msg
 */
function pub(client, topic, qos, msg) {
  client.publish(topic, msg, qos, err => {
    if (!err) {
      console.log("发布成功!");
    } else {
      console.log("发布失败!", err);
    }
  })
}


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


export {
  pub,
  sub,
}

2、VUE页面集成

2.1 引用MQTT 及 工具

import mqtt from "mqtt";
import * as mqttUtils from "@/utils/mqttUtils";

2.2 编写mqtt配置变量

    data() {
      return {
        config: {
          username: "admin",
          password: "public",
          clientId: "code_dev_ui" + new Date().getTime(),
          keepAlive: 60,
          cleanSession: true,
          clear: true
        },
        mqttServer: "ws://192.168.3.30:8083/mqtt",
        client: "",
      }
    },

2.3 建立连接及订阅

      /**
       * 建立连接
       */
      handleConnection() {
        this.client = mqtt.connect(this.mqttServer, this.config);

        // mqtt连接
        this.client.on("connect", (e) => {
          console.log(e, "mqtt连接成功!");
		  let topic1 = "test1";
		  let topic2 = "test2";
		  
		  let qos1 = 0;
		  let qos2 = 0;

          this.mqttUtils.sub(this.client, [topic1, topic2], [qos1, qos2]);
        });

        // 消息处理
        this.client.on("message", (topic, message) => {
		  console.log("收到消息", topic, message);
        })

        // 断线重连
        this.client.on("reconnect", (error) => {
          console.log("正在重连:", new Date().getTime(), error);
        })
        
		// 连接失败
        this.client.on("error", (err) => {
          console.log("mqtt连接失败!{}", err);
          this.client.end();
        })
      },

2.4 发布相关代码

<el-button @click="testPub">发布消息</el-button>
      /**
       * 测试消息发布
       */
      testPub() {
        let topic = "vue_pub_test";
        let qos = 1;
        let msg = {
          content: "测试vue消息发送"
        }
        this.mqttUtils.pub(this.client, topic, qos, JSON.stringify(msg));
      }

2.5 VUE完整代码

<template>
  <el-container>
    <el-button @click="testPub">发布消息</el-button>
  </el-container>
</template>

<script>
  import mqtt from "mqtt";
  import * as mqttUtils from "@/utils/mqttUtils";

  export default {
    name: "MqttTest",
    data() {
      return {
        config: {
          username: "admin",
          password: "public",
          clientId: "code_dev_ui" + new Date().getTime(),
          keepAlive: 60,
          cleanSession: true,
          clear: true
        },
        mqttServer: "ws://192.168.3.30:8083/mqtt",
        client: "",
      }
    },
    methods: {

      /**
       * 建立连接
       */
      handleConnection() {
        this.client = mqtt.connect(this.mqttServer, this.config);

        // mqtt连接
        this.client.on("connect", (e) => {
          console.log(e, "mqtt连接成功!");
		  let topic1 = "test1";
		  let topic2 = "test2";
		  
		  let qos1 = 0;
		  let qos2 = 0;

          this.mqttUtils.sub(this.client, [topic1, topic2], [qos1, qos2]);
        });

        // 消息处理
        this.client.on("message", (topic, message) => {
		  console.log("收到消息", topic, message);
        })

        // 断线重连
        this.client.on("reconnect", (error) => {
          console.log("正在重连:", new Date().getTime(), error);
        })
        
		// 连接失败
        this.client.on("error", (err) => {
          console.log("mqtt连接失败!{}", err);
          this.client.end();
        })
      },

      /**
       * 测试消息发布
       */
      testPub() {
        let topic = "vue_pub_test";
        let qos = 1;
        let msg = {
          content: "测试vue消息发送"
        }
        this.mqttUtils.pub(this.client, topic, qos, JSON.stringify(msg));
      }
    },
    mounted() {
      this.handleConnection();
    }
  }
</script>

四、基于MQTTX,联调测试

1、测试VUE项目sub

 

2、测试VUE项目pub

 

### 如何在 Vue.js 中使用 Paho MQTT 客户端进行 MQTT 通信 #### 引入 paho-mqtt 库 为了能够在 Vue.js 项目中使用 Paho MQTT 客户端,首先需要引入 `paho-mqtt` 库。可以通过 CDN 或者 npm 方式安装该库。 通过 CDN 的方式可以直接在 HTML 文件头部加入如下脚本标签[^1]: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script> ``` 如果偏好于使用 npm,则可以在命令行执行以下指令来安装依赖包[^5]: ```bash npm install paho-mqtt --save ``` 之后,在相应的 JavaScript 文件顶部导入此模块: ```javascript import { Client } from 'paho-mqtt'; ``` #### 创建 MQTT 连接实例 定义一个新的方法用于初始化 MQTT 客户端对象,并建立与指定地址的 WebSocket 连接: ```javascript // 建立连接配置项 const client = new Client('ws://broker.hivemq.com:8000', 'clientId-' + Math.random().toString(16).substr(2, 8)); client.onConnectionLost = (responseObject) => { console.log("Connection lost: " + responseObject.errorMessage); }; client.onMessageArrived = message => { console.log(`Received message ${message.payloadString} on topic ${message.destinationName}`); }; ``` 上述代码片段展示了如何创建一个带有唯一 ID 的客户端实例,并设置了两个回调函数分别处理断开事件和接收新消息的情况。 #### 订阅主题与发送消息 当成功建立了连接后,便可以调用 subscribe 方法订阅特定的主题;同样地,publish 函数允许向某个具体的话题发布信息。 ```javascript function connectAndSubscribe() { const options = { onSuccess: () => { console.log('Connected'); // Subscribe to a topic client.subscribe('/world'); // Publish a message const message = new Paho.MQTT.Message('Hello World!'); message.destinationName = '/hello'; client.send(message); }, onFailure: responseObject => { console.error('Failed to connect:', responseObject.errorMessage); } }; client.connect(options); } ``` 这段示例说明了怎样利用 success 和 failure 回调机制确认连接状态的变化,同时实现了基本的消息收发操作。 #### 断开连接 最后不要忘记提供一种安全的方式让用户主动终止会话: ```javascript function disconnectClient(){ if(client.isConnected()){ client.disconnect(); console.log('Disconnected'); } } ``` 以上就是在 Vue.js 环境里集成并运用 Paho MQTT 实现简单 Pub/Sub 功能的方法概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值