MQTT-Vue整合

Vue整合

依賴環境

  • nodejs 版本 >= 18
  • 安裝 element plus
npm install element-plus
  • 安裝 mqtt
npm install mqtt

初始化Vue項目

  • 使用 vite 創建項目
  1. 執行命令 npm create vite@latest
  2. 輸入項目名稱 vue-mqtt-demo

在這里插入圖片描述

MQTT連接

連接組件代碼

components/MqttDemo.vue

<script setup>
import { ref } from "vue";
import mqtt from "mqtt";// 消息質量取值數組
const qosList = [0, 1, 2];/* -------建立和關閉連接-------*/
// 定義鏈接信息對象
const connectionInfo = ref({protocol: 'ws',host: "192.168.40.128",port: 8083,clientId: "mqtt_vue_" + Math.random().toString(16).substring(2, 8),username: "admin",password: "admin123456",clean: true,connectTimeout: 10 * 1000, // 單位:msreconnectPeriod: 4000, // 單位:ms
})// 創建鏈接對象
const client = ref({})
// 鏈接初始化相關數據
const clientInitData = ref({      connnected: false
})// 建立連接事件處理函數
const createConnection = () => {const { protocol, host, port , ...options } = connectionInfo.value;const connectUrl = `${protocol}://${host}:${port}/mqtt`;console.log(connectUrl)// 建立連接client.value = mqtt.connect(connectUrl , options);   clientInitData.value.connnected = true ;console.info("create connection successful...")}// 關閉連接
const closeConnection = () => {// 如果設置為true:立即關閉套接字,不發送MQTT DISCONNECT包。// 如果設置為false(默認值):先發送MQTT DISCONNECT包給代理,然后關閉套接字client.value.end(false , () => {clientInitData.value.connnected = false;console.info("close connection successful...")})
}
</script><template><div class="mqtt-demo"><el-card><h1>配置信息</h1><el-form label-position="top"><el-row :gutter="20"><el-col :span="8"><el-form-item prop="protocol" label="選擇協議"><el-select v-model="connectionInfo.protocol"><el-option label="ws://" value="ws"></el-option><el-option label="wss://" value="wss"></el-option></el-select></el-form-item></el-col><el-col :span="8"><el-form-item prop="host" label="主機地址"><el-input v-model="connectionInfo.host"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="port" label="端口號"><el-input type="number" placeholder="8083/8084" v-model="connectionInfo.port"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="clientId" label="客戶端ID"><el-input v-model="connectionInfo.clientId"> </el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="username" label="用戶名"><el-input v-model="connectionInfo.username"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="password" label="密碼"><el-input v-model="connectionInfo.password"></el-input></el-form-item></el-col><el-col :span="24"><el-button type="primary" @click="createConnection" v-bind:disabled="clientInitData.connnected">建立連接</el-button><el-button type="danger" @click="closeConnection" v-bind:disabled="!clientInitData.connnected">斷開連接</el-button></el-col></el-row></el-form></el-card></div>
</template><style>
.mqtt-demo {max-width: 1200px;margin: 32px auto 0 auto;
}h1 {font-size: 16px;margin-top: 0;
}.el-card {margin-bottom: 32px;
}
.el-card__body {padding: 24px;
}.el-select {width: 100%;
}.text-right {text-align: right;
}.sub-btn {margin-top: 30px;
}
</style>

首頁引入連接組件

App.vue

<template><MqttDemo />
</template><script setup>
import MqttDemo from "./components/MqttDemo.vue";</script><style></style>

運行項目

npm run dev

在這里插入圖片描述

訪問頁面

http://localhost:5173/

在這里插入圖片描述

建立連接

在這里插入圖片描述

斷開連接

在這里插入圖片描述

MQTT訂閱

訂閱相關代碼

components/MqttDemo.vue

  • JS 代碼
// 消息質量取值數組
const qosList = [0, 1, 2];/* -----訂閱和取消訂閱------ */const receivedMessages = ref(null);
const subscriptionInfo = ref({// 訂閱參數數據模型topic: "",qos: 0,
});
const subscriptionInitData = ref({// 訂閱初始化數據subscription: false,
});// 訂閱主題的事件處理函數
const subscriptionTopicHandler = () => {const { topic, qos } = subscriptionInfo.value;console.info(qos);client.value.subscribe(topic, { qos }, (error, res) => {if (error) {console.info("subscribe topic error:", error);return;}subscriptionInitData.value.subscription = true;console.info("subscribe topic successful.... ");// 訂閱成功以后,監聽發送消息事件client.value.on("message", (topic, message) => {console.info("topic -----> " + topic + ", message -----> " + message);receivedMessages.value ="topic -----> " + topic + ", message -----> " + message;});});
};// 取消訂閱的事件處理函數
const unSubscriptionTopicHandler = () => {const { topic, qos } = subscriptionInfo.value;client.value.unsubscribe(topic, { qos }, (error, res) => {if (error) {console.info("unSubscriptionTopic Error:", error);return;}subscriptionInitData.value.subscription = false;console.info("unSubscriptionTopic successful.... ");});
};
  • HTML 頁面
 <el-card><h1>訂閱主題</h1><el-form label-position="top"><el-row :gutter="20"><el-col :span="8"><el-form-item prop="topic" label="Topic"><el-input v-model="subscriptionInfo.topic"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="qos" label="QoS"><el-select v-model="subscriptionInfo.qos"><el-optionv-for="qos in qosList":key="qos":label="qos":value="qos"></el-option></el-select></el-form-item></el-col><el-col :span="8"><el-button type="primary" class="sub-btn" @click="subscriptionTopicHandler"v-bind:disabled="subscriptionInitData.subscription">訂閱主題</el-button><el-button type="primary" class="sub-btn" @click="unSubscriptionTopicHandler"v-bind:disabled="!subscriptionInitData.subscription">取消訂閱</el-button></el-col></el-row></el-form></el-card><el-card><h1>接收到的消息</h1><el-col :span="24"><el-input type="textarea" :rows="3" readonly v-model="receivedMessages"></el-input></el-col></el-card>

運行訪問

在這里插入圖片描述

訂閱主題

在這里插入圖片描述

取消訂閱

在這里插入圖片描述

MQTT 發布

發布相關代碼

  • JS 代碼
/* ----- 發布消息 ----- */
// 定義發布消息對象
const publishInfo = ref({topic: '' ,qos: 0,payLoad: ''
})// 發布消息的事件處理函數
const publishMsg = () => {const {topic , payLoad , qos } = publishInfo.value ;client.value.publish(topic , payLoad , { qos } , (error , res) => {if(error) {console.info("publish msg info error...." , error)return ;}console.info("publish msg info successful....")}) ;}
  • HTML 代碼
 <el-card><h1>發布消息</h1><el-form label-position="top"><el-row :gutter="20"><el-col :span="8"><el-form-item prop="topic" label="Topic"><el-input v-model="publishInfo.topic"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="payload" label="Payload"><el-input v-model="publishInfo.payLoad"></el-input></el-form-item></el-col><el-col :span="8"><el-form-item prop="qos" label="QoS"><el-select v-model="publishInfo.qos"><el-optionv-for="qos in qosList":key="qos":label="qos":value="qos"></el-option></el-select></el-form-item></el-col></el-row></el-form><el-col :span="24" class="text-right"><el-button type="primary" @click="publishMsg">發布消息</el-button></el-col></el-card>

運行訪問

在這里插入圖片描述

訂閱主題 test

在這里插入圖片描述

發送接收消息

在這里插入圖片描述
點擊發送后,接收消息框立馬收到發布的消息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82365.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82365.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IP 地址反向解析(IP反查域名)原理與應用

一、IP 地址反向解析的原理與技術細節 IP 地址反向解析&#xff08;Reverse IP Lookup&#xff09;是一種將 IP 地址映射回其關聯域名或主機名的網絡技術&#xff0c;與常見的正向 DNS 解析&#xff08;將域名解析為 IP 地址&#xff09;形成互補。這一過程在網絡安全研究、漏…

Mermaid 文件支持的圖表

Mermaid 文件后綴支持多種類型的圖表&#xff0c;包括但不限于&#xff1a; 流程圖&#xff1a;用于描述流程和決策的圖表&#xff0c;常用于業務流程的表示和分析。 時序圖&#xff1a;用于描述事件發生的順序和時序關系的圖表&#xff0c;常用于系統交互和消息傳遞的分析。 …

用 Python 構建自動駕駛的實時通信系統:讓車輛“交流”起來!

用 Python 構建自動駕駛的實時通信系統:讓車輛“交流”起來! 自動駕駛技術正加速變革全球交通體系,它不僅是機器學習與計算機視覺的勝利,更是一場 高效通信架構的革命。自動駕駛汽車需要實時交換信息,比如: 傳感器數據(雷達、激光雷達、攝像頭)V2V(車與車通信)V2X(…

PDF處理控件Aspose.PDF教程:以編程方式合并PDF文檔

合并 PDF 文檔是常見的需求——無論您是整理報告、合并發票還是整合掃描頁面。單一、統一的文件更易于在個人、學術或專業用途中共享、存儲和管理。 本文將向您展示如何使用 Aspose.PDF在C#、Java 和 Python中以編程方式合并 PDf 文件。 Aspose.PDF最新版下載 為什么使用 As…

.gitignore 的基本用法

.gitignore 文件是 Git 版本控制系統中一個非常重要的配置文件&#xff0c;用于指定哪些文件或目錄應該被 Git 忽略&#xff0c;不納入版本控制。合理使用 .gitignore 可以避免將臨時文件、編譯產物、敏感信息等不必要的文件提交到代碼倉庫中。 1. .gitignore 的基本用法 &…

華為OD機試真題——分糖果(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 A卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

通過chrome插件自動生成博客評論,高效發外鏈

最近crazy cattle 3d這個詞爆火&#xff0c;很多人都在做&#xff0c;競爭異常激烈&#xff0c;甚至可以說是慘不忍睹。 從最近的數據看&#xff0c;勝出的主要是crazycattle3d.com, crazycattle3d.io, crazy-cattle-3d.com這幾個&#xff0c;流量最高的crazycattle3d.com已經…

創建一個簡易的風扇動畫界面:基于 WPF 和 XAML 的實現教程

在本教程中&#xff0c;我們將通過使用 WPF (Windows Presentation Foundation) 和 XAML (Extensible Application Markup Language) 創建一個簡單的“臺式風扇”界面。我們將使用 XAML 繪制風扇的外觀&#xff0c;包含風扇葉片、風扇框架、支架和按鈕等元素&#xff0c;并通過…

VPet虛擬桌寵,一款桌寵軟件,支持各種互動投喂等. 開源免費并且支持創意工坊

&#x1f4cc; 大家好&#xff0c;我是智界工具庫&#xff0c;每天分享好用實用且智能的開源項目&#xff0c;以及在JAVA語言開發中遇到的問題&#xff0c;如果本篇文章對您有所幫助&#xff0c;請幫我點個小贊小收藏小關注吧&#xff0c;謝謝喲&#xff01;&#x1f618; 工具…

HTTP Digest 認證:原理剖析與服務端實現詳解

HTTP Digest 認證&#xff1a;原理剖析與服務端實現詳解 HTTP 協議中的 Digest 認證&#xff08;摘要認證&#xff09;是一種比 Basic 認證更安全的身份驗證機制&#xff0c;其核心設計是避免密碼明文傳輸&#xff0c;并通過動態隨機數&#xff08;Nonce&#xff09;防范重放攻…

PDF 表單按鈕動態邊框效果

問題描述 用戶在 Acrobat X 中創建 PDF 表單時遇到一個需求&#xff1a;表單以網格形式列出多個選項&#xff0c;當點擊某個選項時&#xff0c;需要在選項周圍顯示邊框&#xff08;圓形或方形&#xff09;&#xff0c;再次點擊時邊框消失。 試過的解決方案 在文本上方放置透…

部署Gitlab-CE with Docker私有云環境

應用環境 Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64) Docker version 28.1.1, build 4eba377 文章目錄 拉取容器鏡像生成Run腳本參數解讀實例腳本環境配置管理員密碼遺忘服務郵箱配置郵件測試 運維問題集錦(1) 端口映射關系(2) 服務日志(3) 分支受保護 項目操作…

MyBatis 的動態 SQL 特性來實現有值字段才進行插入或更新

MyBatis 動態 SQL 解決方案 <!-- 動態INSERT語句 --> <insert id"addDailyFreezeTer" parameterType"com.linyang.pecker.pojo.DailyFreezeTerminalBean">INSERT INTO dailyfreezeter_info<trim prefix"(" suffix")" …

網絡原理與 TCP/IP 協議詳解

一、網絡通信的本質與基礎概念 1.1 什么是網絡通信&#xff1f; 網絡通信的本質是跨設備的數據交換&#xff0c;其核心目標是讓不同物理位置的設備能夠共享信息。這種交換需要解決三個核心問題&#xff1a; 如何定位設備&#xff1f; → IP地址如何找到具體服務&#xff1f;…

CUDA編程筆記(1)--最簡單的核函數

本文用來記錄cuda編程的一些筆記以及知識 本筆記運行在windows系統&#xff0c;vs編譯器中&#xff0c;cuda版本是12.6 先看一下最基本的代碼例子&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device…

系統架構中的限流實踐:構建多層防護體系(二)

系統架構中的限流實踐:構建多層防護體系 一、接入層限流:流量攔截第一關二、應用層限流(服務內限流)Java生態方案對比三、分布式限流(跨服務限流)四、數據層限流(數據庫/緩存限流)1. 數據庫防護策略2. 緩存優化方案五、中間件層限流(消息隊列/分布式服務)六、客戶端限…

AI學習筆記二十八:使用ESP32 CAM和YOLOV5實現目標檢測

若該文為原創文章&#xff0c;轉載請注明原文出處。 最近在研究使用APP如何顯示ESP32 CAM的攝像頭數據&#xff0c;看到有人實現把ESP32 CAM的數據流上傳&#xff0c;通過YOLOV5來檢測&#xff0c;實現拉流推理&#xff0c;這里復現一下。 一、環境 arduino配置esp32-cam開發環…

uni-app(5):Vue3語法基礎上

Vue (讀音 /vju?/&#xff0c;類似于 view) 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是&#xff0c;Vue 被設計為可以自底向上逐層應用。Vue.js 的核心是一個允許采用簡潔的模板語法來聲明式地將數據渲染進 DOM 的系統&#xff0c;只關注視圖層&#xff0c;…

JAVA:Kafka 存儲接口詳解與實踐樣例

?? 1、簡述 Kafka 以其高吞吐、可擴展和高可靠性著稱,其強大性能的背后核心在于其高效的存儲設計。Kafka 不是傳統意義上的隊列,而是一個分布式日志系統,其存儲模塊是核心組成部分。 本文將深入剖析 Kafka 的存儲接口實現機制,并結合 Java 示例進行模擬驗證。 ?? 2、…

Docker 使用鏡像[SpringBoot之Docker實戰系列] - 第537篇

歷史文章&#xff08;文章累計530&#xff09; 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 《…