Vue 是一款由尤雨溪及其团队开发的渐进式 Javascript 前端框架。该框架具备数据双向绑定、组件化、响应式和轻量等特点,搭配其脚手架 Vue CLI 使得开发者更加容易上手,大大减少了学习成本。同时其配备一个专用的状态管理模式 Vuex ,在这里可以集中管理所有组件的状态。

MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议。该协议提供了一对多的消息分发和应用程序的解耦,具备很小的传输消耗和协议数据交换、最大限度减少网络流量和三种不同消息服务质量等级,满足不同投递需求的优势。

本文主要介绍如何在 Vue 项目中使用 MQTT,实现客户端与 MQTT 服务器的连接、订阅、收发消息、取消订阅等功能。

项目初始化
新建项目
参考链接如下:

使用 Vue CLI 创建 Vue 项目
通过引用 Vue.js 创建 Vue 项目
示例:

1 vue create vue-mqtt-test

安装 MQTT 客户端库

  1. 通过命令行安装:可以使用 npm 或 yarn 命令,二者选一

    1 npm install mqtt --save
    1 yarn add mqtt
  2. 通过 CDN 引入
    1 <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
  3. 下载到本地,然后使用相对路径引入
    1 <script src="/your/path/to/mqtt.min.js"></script>

MQTT 的使用
连接 MQTT 服务器
本文将使用 EMQ X 提供的 免费公共 MQTT 服务器,该服务基于 EMQ X 的 MQTT 物联网云平台 创建。服务器接入信息如下:

Broker: broker.emqx.io
TCP Port: 1883
Websocket Port: 8083
连接关键代码:

 1 <script>
2 import mqtt from 'mqtt'
3
4 export default {
5 data() {
6 return {
7 connection: {
8 host: 'broker.emqx.io',
9 port: 8083,
10 endpoint: '/mqtt',
11 clean: true, // 保留会话
12 connectTimeout: 4000, // 超时时间
13 reconnectPeriod: 4000, // 重连时间间隔
14 // 认证信息
15 clientId: 'mqttjs_3be2c321',
16 username: 'emqx_test',
17 password: 'emqx_test',
18 },
19 subscription: {
20 topic: 'topic/mqttx',
21 qos: 0,
22 },
23 publish: {
24 topic: 'topic/browser',
25 qos: 0,
26 payload: '{ "msg": "Hello, I am browser." }',
27 },
28 receiveNews: '',
29 qosList: [
30 { label: 0, value: 0 },
31 { label: 1, value: 1 },
32 { label: 2, value: 2 },
33 ],
34 client: {
35 connected: false,
36 },
37 subscribeSuccess: false,
38 }
39 },
40
41 methods: {
42 // 创建连接
43 createConnection() {
44 // 连接字符串, 通过协议指定使用的连接方式
45 // ws 未加密 WebSocket 连接
46 // wss 加密 WebSocket 连接
47 // mqtt 未加密 TCP 连接
48 // mqtts 加密 TCP 连接
49 // wxs 微信小程序连接
50 // alis 支付宝小程序连接
51 const { host, port, endpoint, ...options } = this.connection
52 const connectUrl = `ws://${host}:${port}${endpoint}`
53 try {
54 this.client = mqtt.connect(connectUrl, options)
55 } catch (error) {
56 console.log('mqtt.connect error', error)
57 }
58 this.client.on('connect', () => {
59 console.log('Connection succeeded!')
60 })
61 this.client.on('error', error => {
62 console.log('Connection failed', error)ß
63 })
64 this.client.on('message', (topic, message) => {
65 this.receiveNews = this.receiveNews.concat(message)
66 console.log(`Received message ${message} from topic ${topic}`)
67 })
68 },
69 }
70 }
71 </script>

订阅主题

 1 doSubscribe() {
2 const { topic, qos } = this.subscription
3 this.client.subscribe(topic, qos, (error, res) => {
4 if (error) {
5 console.log('Subscribe to topics error', error)
6 return
7 }
8 this.subscribeSuccess = true
9 console.log('Subscribe to topics res', res)
10 })
11 },

取消订阅

1 doUnSubscribe() {
2 const { topic } = this.subscription
3 this.client.unsubscribe(topic, error => {
4 if (error) {
5 console.log('Unsubscribe error', error)
6 }
7 })
8 }

消息发布

1 doPublish() {
2 const { topic, qos, payload } = this.publication
3 this.client.publish(topic, payload, qos, error => {
4 if (error) {
5 console.log('Publish error', error)
6 }
7 })
8 }

断开连接

 1 destroyConnection() {
2 if (this.client.connected) {
3 try {
4 this.client.end()
5 this.client = {
6 connected: false,
7 }
8 console.log('Successfully disconnected!')
9 } catch (error) {
10 console.log('Disconnect failed', error.toString())
11 }
12 }
13 }

总结
综上所述,我们实现了在 Vue 项目中创建 MQTT 连接,模拟了客户端与 MQTT 服务器进行订阅、收发消息、取消订阅以及断开连接的场景。

Vue 作为三大主流的前端框架之一,既能够在浏览器端使用,也能够在移动端使用,结合 MQTT 协议及 MQTT 物联网云服务 可以开发出很多有趣的应用,比如客服聊天系统或实时监控物联网设备信息的管理系统。
————————————————
版权声明:本文为CSDN博主「EMQX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/emqx_broker/article/details/108769925

在 Vue 项目中使用 MQTT的更多相关文章

  1. vue 项目中实用的小技巧

    # 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...

  2. 如何在VUE项目中添加ESLint

    如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...

  3. 在vue项目中, mock数据

    1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...

  4. 浅谈 Axios 在 Vue 项目中的使用

    介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 它主要有如下特性: 浏览器端发起XMLHttpRequests请求 Node端发起http ...

  5. 去除vue项目中的#及其ie9兼容性

    一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...

  6. vue 项目中当访问路由不存在的时候默认访问404页面

    前言: 在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白.然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面. 一般的处理方法是: 在 ...

  7. vue项目中遇到的那些事。

    前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vu ...

  8. scss/less语法以及在vue项目中的使用(转载)

    1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...

  9. Vue项目中GraphQL入门学习与应用

    1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...

  10. 转:如何在Vue项目中使用vw实现移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...

随机推荐

  1. css 显示n行文字的方法 超出的部分用省略号代替

    // 超出的部分用省略号代替 text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 1; // 显示文字的行数 over ...

  2. C语言补漏--内存管理-完结

    1.内存分布 2.内存操作函数 数组清空 2. 内存拷贝函数 数组拷贝 3.内存对比 总结 堆区开辟 内存泄漏只申请不释放,导致内存空间持续增长,导致推出 内存污染向没有申请的内存空间写数据  向堆区 ...

  3. GMAC网卡相关介绍与分析

    GMAC网卡相关介绍与分析 目录 GMAC网卡相关介绍与分析 环境描述 MII MII RMII GMII RGMII SGMII GMAC网卡信息获取方法 获取GMAC网卡信息 查看PHY工作接口模 ...

  4. 获取某地模型并用Cesium加载(一)

    2023-01-04 最近想用Cesium给学校做一个类似智慧校园的东西,要做的东西很多,首先是获取学校模型的问题,然后怎么用Cesium加载3Dtile 1.获取学校模型 想到之前被老师抓苦力去做春 ...

  5. ChatGPT强势爆红,背后的技术原理是?一文轻松搞懂!

    目录 什么是ChatGPT? OpenAI 背后的原理和发展历程 带来的争议和挑战 尾语 作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.源码解析.科技故事.项目 ...

  6. 中后端做Excel导出功能返回数据流前端如何做处理

    exportFile(params).then(res => { // 直接返回来就是blob数据 if (res) { const xlsx = 'application/vnd.ms-exc ...

  7. LeetCode-2044 统计按位或能得到最大值子集的数目

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-number-of-maximum-bitwise-or-subsets 题目描述 给 ...

  8. 在使用vite报global的错

    解决:

  9. linux常用操作指令记录

    https://maker.pro/linux/tutorial/basic-linux-commands-for-beginners ## 打开终端 ## **Ctrl+Alt+T** ## ls ...

  10. ThreadLocal及常用场景

    ThreadLocal ThreadLocal是Java中的为解决多线程间数据隔离的解决方案,其底层依赖于Java的内存模型,依赖于当前执行线程的内存来完成对数据的存取操作. 一般在使用时,在对象中创 ...