使用MQTTX和前端vue进行通讯

news2025/2/22 0:00:42

需求:根据后端给的接口,前端实现消息订阅和消息加密连接操作,不走后端直接和硬件设备进行操作

1.下载mqttx

官网链接:MQTTX: Your All-in-one MQTT Client Toolbox

根据自己电脑选择不同的操作系统,默认下载后是英文的

 英文版改为中文

 2.根据后端提供链接地址进行连接

高级的部分都别动,连接编辑好后点击右上角就可以连接了

 添加订阅的主题名称,如果是测试的话可以随便输入,比如/test

Qos是决定消息质量,Qos:0,是发送端只发送一次,不管服务端收到没,1是至少发送一次,反正服务端一定能收到 1次,有可能收到2次以上,2保证服务端收到且只收到一次,值越大质量越高,qos越小,网络带宽越低。耗能越低

 

 2.前端mqtt连接,并且进行加密操作

这边的加密操作,其实也就是不能让连接地址暴露在浏览器的控制台里,所以我直接把加密的连接地址进行解密的操作再做链接。其实这个方法就应该要后端把加密的连接通过接口的形式给前端,前端再进行解密,这样就安全些。

下载mqtt和crypto-js

npm install mqtt crypto-js -S

加密代码


文本加密
var ciphertext = CryptoJS.AES.encrypt('连接地址', 'secret key 123').toString();

vue完整代码如下

<!--
 * @Descripttion: 在Vue项目中使用mqtt
 * @version: 
 * @Author: 叫我欧皇大人
 * @email: 13071200550@163.com
 * @Date: 2023-07-10 
-->

<template>
    <div class="content-box">
        <div class="container">
            <div class="chatroomBox">
                {{ dataChart }}
                <el-row :gutter="20">
                    <el-col :span="12"><el-input v-model="message" placeholder="请输入内容"></el-input></el-col>
                    <el-col :span="12"> <el-button @click="mqttPublish" type="success" round>发送消息</el-button></el-col>
                </el-row>
            </div>
        </div>
    </div>
</template>
<script>
import mqtt from 'mqtt';
import CryptoJS from 'crypto-js';
var client;

// 连接设置
let options = {
    clean: true, // 保留会话
    connectTimeout: 4000, // 超时时间
    reconnectPeriod: 1000, // 重连时间间隔
    // 认证信息
    clientId: 'mqtitId-Home',
    username: 'root3',
    password: '123456'
};
var bytes = CryptoJS.AES.decrypt('加密后连接地址进行解密', 'secret key 123');
var connectUrl = bytes.toString(CryptoJS.enc.Utf8);
// 创建客户端
client = mqtt.connect(connectUrl, options);
export default {
    data() {
        return {
            message: '',
            dataChart: null,
            logs: [],
            connection: {
                host: '120.55.60.217',
                port: 1883,
                // endpoint: '/mqtt',
                clean: true, // 保留会话
                connectTimeout: 4000, // 超时时间
                reconnectPeriod: 4000, // 重连时间间隔
                // 认证信息
                clientId: 'mqttx_a16dc275',
                username: 'root3',
                password: '123456'
            }
        };
    },
    mounted() {
        this.connectMQTT();
        //   this.mqttReceive();
    },
    watch: {
        textareaMsg: function(newValue, oldValue) {
            console.log(newValue, oldValue, 'watch侦听到的数据');
            return newValue;
        }
    },
    methods: {
        /**
         * @name:初始化mqtt
         * @msg:
         * @param {*}
         * @return {*}
         */
        connectMQTT() {
            if (client.connected) {
                client.end();
            }
            // mqtt连接
            client.on('connect', e => {
                console.log('连接成功:');
                client.subscribe(['/test', 'test2'], error => {
                    if (!error) {
                        console.log('订阅成功');
                    } else {
                        console.log('订阅失败');
                    }
                });
            });
            // 接收消息处理
            client.on('message', (topic, message) => {
                console.log('收到来自', topic, '的消息', message.toString());
                console.log('message: ', JSON.parse(message.toString()));
                this.dataChart = JSON.parse(message.toString());
            });
            // 断开发起重连
            client.on('reconnect', error => {
                console.log('正在重连:', error);
            });
            // 链接异常处理
            client.on('error', error => {
                console.log('连接失败:', error);
            });
        },
        /**
         * @name:发布mqtt消息
         * @msg:
         * @param {*}
         * @return {*}
         */
        mqttPublish() {
            let topic = '/test'; //和后台约定好的主题
            client.publish(topic, JSON.stringify(this.message));
        }
    },
    beforeDestroy() {
        if (this.client) {
            this.client.end();
        }
    }
};
</script>

<style scoped lang="less">
.chatroomBox {
    width: 800px;
    height: 500px;
}
/deep/.el-textarea__inner {
    height: 200px;
}
</style>

3.效果

 文章到此结束,希望对你有所帮助,有不懂的可以在评论区或者私信我~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金鸣表格识别中何时应勾选“手写”选项?

在金鸣表格文字识别系统的表格识别模块中&#xff0c;有个“手写”的复选框可供用户选择性使用。这里的“手写”是手写识别的简称&#xff0c;设置此项的目的是为了让用户更准确地识别手写的表格图片中的文字。为何要单独设置这个选项而不是由程序全自动地进行处理呢&#xff1…

【GitOps系列】K8s极简实战

文章目录 示例应用介绍部署应用到k8s 如何使用命名空间隔离团队及应用环境&#xff1f;如何为业务选择最适合的工作负载类型&#xff1f;如何解决服务发现问题&#xff1f;如何迁移应用配置&#xff1f;如何将集群的业务服务暴露外网访问&#xff1f;如何保障业务资源需求和自动…

JavaWeb(3)——HTML、CSS、JS 快速入门

一、JavaScript 运算符 • 赋值运算符&#xff08; &#xff09; 赋值运算符执行过程&#xff1f; 将等号右边的值赋予给左边, 要求左边必须是一个容器 出现是为了简化代码, 比如让 let age 18 &#xff0c;age 加 2 怎么写呢 let age 18age 2console.log(age)age * 2con…

html+JavaScript实现一个好看的颜色码查询器,支持查询、转换、颜色选择器和颜色码对照表

前言 相信大家平时工作的时候应该会经常用到颜色码吧&#xff0c;比如说想找个好看的颜色&#xff0c;或者有个颜色码但是不知道这个码是什么颜色的&#xff0c;这个时候我们就可以用颜色码对照表或者颜色码查询来查看了。 当然也可以用截图软件或者取色器或者PS来查看&#…

如何有效检测、识别和管理 Terraform 配置漂移?

作者&#xff5c;Krishnadutt Panchagnula 翻译&#xff5c;Seal软件 链接&#xff5c;https://betterprogramming.pub/detecting-identifying-and-managing-terraform-state-drift-997366a74537 在理想的 IaC 世界中&#xff0c;我们所有的基础设施实现和更新都是通过将更新的…

【高并发】高并发架构实战:从需求分析到系统设计

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 很多软件工程师的职业规划是成为架构师&#xff0c;但是要成为架构师很多时候要求先有架构设计经验&#xff0c;而不做架构师又怎么会有架构设计经验呢&#xff1f;那么要如何获得架构设…

Cesium 测距、测面功能实现

参考博主 功能代码参考 新需求&#xff1a;点击测距&#xff0c;此时画线逻辑已生成到运行缓存中&#xff0c;如果 用户误触测距&#xff0c;想撤销&#xff0c;如何操作&#xff1f; 代码&#xff1a; // 重置画图resetDraw(){// 清除可能会用到的监听事件if (this.handle…

操作系统17:外存组织方式和文件存储管理

目录 1、外存的组织方式 &#xff08;1&#xff09;连续组织方式 &#xff08;2&#xff09;链接组织方式 2.1 - 隐式链接 2.2 - 显式链接 &#xff08;3&#xff09;索引组织方式 3.1 - 单级索引组织方式 3.2 - 多级索引组织方式 3.3 - 增量式索引组织方式 2、文件存…

【操作系统】几种基本页面置换算法的基本思想和流程图

目录 一、概述二、最佳置换算法&#xff08;OPT&#xff09;三、先进先出置换算法&#xff08;FIFO&#xff09;四、最近最久未使用置换算法&#xff08;LRU&#xff09;五、三种页面置换算法优缺点对比六、运行结果七、总结 一、概述 在地址映射过程中&#xff0c;若在页面中发…

Linux 发行版 Gentoo 存在重大漏洞

导读网络安全公司 SonarSource 在日前研究中发现&#xff0c;Gentoo Linux 发行版中存在漏洞 CVE-2023-28424&#xff0c;黑客可以利用该漏洞进行 SQL 注入攻击。 研究人员从 GentooLinux 的 Soko 搜索组件中找到了这个漏洞。该漏洞的 CVSS 风险评分为 9.1&#xff0c;属于特别…

6款开源中文OCR使用介绍(亲测效果)

文章目录 前言开源ocr项目1. Paddle OCR&#xff08;推荐指数&#xff1a;★★★★★&#xff09;1.1 简介1.2 使用1.3 优缺点 2. CnOCR&#xff08;推荐指数&#xff1a;★★★★★&#xff09;2.1 简介2.2 使用2.3 优缺点 3. chinese_lite OCR&#xff08;推荐指数&#xff1…

保障AI时代的图像安全:揭示解决虚假图片危机的三种策略

写在前面从 P 图到假图批量生成&#xff0c;AI 图像安全成可信 AI 重点关注方向三大技术&#xff1a;提前布局&#xff0c;合合信息 AI 图像安全技术助力行业健康发展✔ AI 图像篡改检测技术✔ 生成式图像鉴别技术✔ OCR 对抗攻击技术 一项标准&#xff1a;与中国信通院等权威机…

在本机搭建自己的ftp服务器--最简单的方法(详细教程)

在本机搭建自己的ftp服务器–最简单的方法 FTP服务器可以在局域网中快速传输文件&#xff0c;是在互联网上提供文件存储和访问服务的计算机&#xff0c;它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义&#xff0c;就是专门用来传输文件的协议…

vue-next-admin跨域配置

vue-next-admin&#xff0c;这是基于 vue3.x CompositionAPI typescript vite element plus vue-router-next next.vuex&#xff0c;适配手机、平板、pc 的后台开源免费模板库 这是个开源免费的后台管理系统&#xff0c;从v2到v3&#xff0c;变化比较大&#xff0c;但是…

Windows系统安装配置Oracle数据库连接工具PLSQL

1.解压连接工具所需轻桌面压缩包 直接将轻桌面压缩包解压到一个自定义路径下&#xff08;三个里面选择其中一个&#xff0c;推荐选择第一个轻桌面包&#xff09;&#xff0c;后面的环境变量会用到。 2.配置Windows环境变量 NLS_LANG AMERICAN_AMERICA.AL32UTF8 ORACLE_HOME …

VMware安装Ubuntu(VMware版本17-Ubuntu版本16.0)

VMware安装Ubuntu&#xff08;VMware版本17-Ubuntu版本16.0&#xff09; 一&#xff0c;VMware虚拟机下载官网点击https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/17_0 二&#xff0c;Ubuntu乌班图下载官网点…

解决Vue项目打包后dist中的index.html用浏览器直接打开显示空白页的问题

目录 场景描述 问题分析 解决方案 vue-cli2项目通过修改index.html引用路径或添加配置信息 方案一&#xff1a;将index.html中引用的绝对路径改为相对路径 方案二&#xff1a;修改项目的assetsPublicPath或添加publicPath配置信息 vue-cli3项目通过修改index.html引用路…

Mars3d采用ellipsoid球实现模拟地球旋转效果

1.Mars3d采用ellipsoid球实现模拟地球旋转效果 2.开始自选装之后&#xff0c;模型一直闪烁 http://mars3d.cn/editor-vue.html?idgraphic/entity/ellipsoid 3.相关代码&#xff1a; import * as mars3d from "mars3d"export let map // mars3d.Map三维地图对象 …

Linux基础服务10——虚拟化kvm

文章目录 一、基本了解二、安装kvm2.1 部署准备2.2 安装基础服务2.3 安装web管理服务 三、web界面管理3.1 添加kvm主机3.2 存储管理3.2.1 上传镜像3.2.2 扩容存储池 3.3 网络管理3.4 创建虚拟机3.5 报错处理3.5.1 Server disconnected3.5.1 文件句柄问题 一、基本了解 什么是虚…

短视频抖音seo源码矩阵系统源码开发规则

一、 技术开发文档说明 目录 一、 技术开发文档说明 1. 系统架构 2. 抖音seo排名系统模块组成 二、功能结构&#xff1a; 三、 抖音seo源码开发功能目录 四、 短视频抖音seo矩阵系统源码开发代码展示 1. 建立数据表 1. 系统架构 短视频抖音seo矩阵源码部署功能架构包含…