在 Vue 项目中使用 MQTT
Vue 是一款由尤雨溪及其团队开发的渐进式 Javascript 前端框架。该框架具备数据双向绑定、组件化、响应式和轻量等特点,搭配其脚手架 Vue CLI 使得开发者更加容易上手,大大减少了学习成本。同时其配备一个专用的状态管理模式 Vuex ,在这里可以集中管理所有组件的状态。
MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议。该协议提供了一对多的消息分发和应用程序的解耦,具备很小的传输消耗和协议数据交换、最大限度减少网络流量和三种不同消息服务质量等级,满足不同投递需求的优势。
本文主要介绍如何在 Vue 项目中使用 MQTT,实现客户端与 MQTT 服务器的连接、订阅、收发消息、取消订阅等功能。
项目初始化
新建项目
参考链接如下:
使用 Vue CLI 创建 Vue 项目
通过引用 Vue.js 创建 Vue 项目
示例:
1 vue create vue-mqtt-test
安装 MQTT 客户端库
通过命令行安装:可以使用 npm 或 yarn 命令,二者选一
1 npm install mqtt --save
1 yarn add mqtt
- 通过 CDN 引入
1 <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
- 下载到本地,然后使用相对路径引入
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的更多相关文章
- vue 项目中实用的小技巧
# 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...
- 如何在VUE项目中添加ESLint
如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...
- 在vue项目中, mock数据
1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...
- 浅谈 Axios 在 Vue 项目中的使用
介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 特性 它主要有如下特性: 浏览器端发起XMLHttpRequests请求 Node端发起http ...
- 去除vue项目中的#及其ie9兼容性
一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...
- vue 项目中当访问路由不存在的时候默认访问404页面
前言: 在Vue项目中,当访问的页面路由不存在或错误时,页面显示为一片空白.然而,通常我们需要对访问url不存在或者错误的情况下添加默认的404页面,即not found页面. 一般的处理方法是: 在 ...
- vue项目中遇到的那些事。
前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vu ...
- scss/less语法以及在vue项目中的使用(转载)
1.scss与less都是css的预处理器,首先我们的明白为什么要用scss与less,因为css只是一种标记语言,其中并没有函数变量之类的,所以当写复杂的样式时必然存在局限性,不灵活,而scss与l ...
- Vue项目中GraphQL入门学习与应用
1.GraphQL是什么,能干什么? 正如官网所说,GraphQL是一种用于API查询的语言.Facebook 的移动应用从 2012 年就开始使用 GraphQL.GraphQL 规范于 2015 ...
- 转:如何在Vue项目中使用vw实现移动端适配
https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...
随机推荐
- 学习Java Day29
今天学习了类的设计技巧: 1.一定要保证数据私有 2.一定要对数据初始化 3.不要在类中使用过多的基本类型 4.不是所有的字段都需要单独的字段访问器和字段更改器 5.分解有过多职责的类 6.类名和方法 ...
- NoSQL(简介、历史)
NoSQL 为什么使用NoSQL 1.单机MySQL的网站 APP----->DAL------>MySQL 90年代:一个基本的网站访问量一般不会很大,单个数据库完全足够. 那个时候,更 ...
- 【Vue】Vue开源样式库 Vuex的使用 vuex的执行流程 Vue-router的使用 路由跳转 路由守卫
目录 昨日回顾 纯净的Vue项目 今日内容 0 开源样式库 1 Vuex 的使用 1.1 vuex的执行流程图 Vuex的使用 购物车案例 2 Vue-router的使用 2.1 基本使用 2.2 路 ...
- LG P1919
\(\text{FFT}\) #include <cstdio> #include <cmath> #include <iostream> #include < ...
- 华为云CodeArts Artifact,5大特性守护制品质量与安全
摘要:2023年2月23日,华为云CodeArts Artifact制品仓库服务正式上线,目标进一步赋能企业伙伴与开发者,实现软件作业中可信制品生产与应用活动快速落地,提高软件交付效率与质量. 本文分 ...
- Vue学习笔记之Hello Vue
1. 引言 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上 ...
- Java第三讲动手动脑
1 以上代码无法通过编译主要是由于在Foo类中自定义了有参的构造函数,系统不在提供默认的构造函数(无参),而在上述的引用中并没有提供参数导致无法通过编译. 2. 运行结果 由运行结果分析可知,在运行时 ...
- LeetCode-1706 球会落在何处
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/where-will-the-ball-fall 题目描述 用一个大小为 m x n 的二维网格 ...
- 跟女朋友介绍十个常用的 Python 内置函数,她夸了我一整天
内置函数是什么 了解内置函数之前,先来了解一下什么是函数 将使用频繁的代码段进行封装,并给它起一个名字,当我们使用的时候只需要知道名字就行 函数就是一段封装好的.可以重复使用的代码,函数使得我们的程序 ...
- python基础语法学习笔记(二):表达式与运算符
1.表达式 由一个或者几个数字或者变量和运算符组合成的一行代码 通常会返回一个结果 2.运算符 由一个以上的值经过变化得到新值的过程就叫运算 用于运算的符号叫运算符 运算符分类: 算数运算符 比较或者 ...