vue 通过 mqtt 实现实时接收消息的操作方法

 更新时间:2024年12月09日 09:27:31   作者:叶子_o  
‌MQTT是一种基于发布/订阅模式的轻量级消息协议,适用于硬件性能有限的远程设备和网络状况不佳的环境,这篇文章主要介绍了vue 通过 mqtt 实现实时接收消息,需要的朋友可以参考下

一. MQTT 简介

‌MQTT(消息队列遥测传输)是一种基于发布/订阅模式的轻量级消息协议,适用于硬件性能有限的远程设备和网络状况不佳的环境。‌它工作在TCP/IP协议之上,具有轻量、简单、开放和易于实现的特点,广泛应用于物联网(IoT)、机器与机器(M2M)通信、智能家居等领域。

二. MQTT 的基本组成

MQTT协议由固定头、可变头和消息体三部分组成:

固定头‌:每个消息都有固定头,但其长度不固定,范围为2-5个字节。固定头用于表示消息的长度和其他控制信息。
可变头‌:存储消息相关的属性,如协议名、协议版本号、心跳时长、主题名、消息ID等。不同类型的消息,可变头中的内容也不同。
‌消息体‌:实际发送的数据。例如,CONNECT消息体包含客户端标识、用户名、密码等信息;PUBLISH消息体则是实际发送的消息内容。

三. MQTT 的使用

安装

npm i mqtt --save

引入

import mqtt from 'mqtt'

使用

data() {
	client: null,
    connection: {
      host: 'localhost',
      port: 8083, // 端口号
      endpoint: '/mqtt',
      clean: true,
      connectTimeout: 4000, // 超时时间
      reconnectPeriod: 4000,
      clientId: uuid.v4(), // 这是一个随机生成的自定义的值
      cleanSession: true, // 是否清理Session
      keepAlive: 5 // 心跳间隔
    },
    mqttfalg: true, // 是否开启 mqtt
    // 下边三个的值是与后端约定好的,根据实际情况赋值
    ImgStart: '', 
    ImgSend: '',
    ImgEnd: ''
},
mounted() {
	// 创建连接
	this.createConnection()
},
beforeDestroy() {
	// 断开 mqtt 连接,不然会一直监听消息
  	this.disConnect()
},
methods: {
	// 创建连接
    createConnection() {
      const { host, port, endpoint, ...options } = this.connection
      // 连接的 url
      const connectUrl = `ws://${host}:${port}${endpoint}`
      // 如果开启了 mqtt
      if (this.mqttfalg) {
        this.client = mqtt.connect(connectUrl, options)
        this.client.on('connect', () => {
          console.log('连接成功!')
          // 关闭开关,不然会一直重复连接
          this.mqttfalg = false
          // 订阅配置(这里的参数都是与后端约定好的,根据实际情况传入)
          this.client.subscribe(this.ImgEnd, { qos: 2 })
          this.client.subscribe(this.ImgSend, { qos: 2 })
          this.client.subscribe(this.ImgStart, { qos: 2 })
        })
        // 连接出错执行
        this.client.on('error', error => {
          console.log('连接出错', error)
        })
        // 重连时执行
        this.client.on('reconnect', error => {
          console.log('正在重连', error)
        })
		// 监听收到的消息
        this.client.on('message', async (topic, data) => {
          const json = JSON.parse(data.toString())
          console.log('接到了消息', topic, json)
          // 如果收到的消息 topic 等于发送
          if (topic === this.ImgSend) {
            // 处理收到的消息 json
            console.log('收到的消息内容', json)
          }
		  // 如果收到的消息 topic 等于结束,说明当前最后一条消息已发送完毕
          if (topic === this.ImgEnd) {
            console.log('消息接收完毕')
          }
        })
      }
    },
    // 断开连接
    disConnect() {
      if (this.client) {
        this.client.end()
        console.log('断开连接')
      }
    },
}

到此这篇关于vue 通过 mqtt 实现实时接收消息的文章就介绍到这了,更多相关vue实时接收消息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue 的点击事件获取当前点击的元素方法

    vue 的点击事件获取当前点击的元素方法

    今天小编就为大家分享一篇vue 的点击事件获取当前点击的元素方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue实现三级联动动态菜单

    vue实现三级联动动态菜单

    这篇文章主要为大家详细介绍了vue实现三级联动动态菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • webpack转vite的详细操作流程与问题总结

    webpack转vite的详细操作流程与问题总结

    Vite是新一代的前端开发与构建工具,相比于传统的webpack,Vite 有着极速的本地项目启动速度(通常不超过5s)以及极速的热更新速度(几乎无感知),下面这篇文章主要给大家介绍了关于webpack转vite的详细操作流程与问题总结的相关资料,需要的朋友可以参考下
    2023-03-03
  • Vue.js中数组变动的检测详解

    Vue.js中数组变动的检测详解

    这篇文章给大家主要介绍了Vue.js中数组变动的检测,文中给出了详细的示例代码和过程介绍,相信会对大家的理解和学习很有帮助,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • Vue+ElementUI表格状态区分,row-class-name属性详解

    Vue+ElementUI表格状态区分,row-class-name属性详解

    这篇文章主要介绍了Vue+ElementUI表格状态区分,row-class-name属性,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Vue3 <Suspense>正确使用指南与注意事项

    Vue3 <Suspense>正确使用指南与注意事项

    本文详细介绍了Vue3中<Suspense>组件的使用问题及解决方案,包括Promise返回值未正确显示为字符串和fallback内容未显示的问题,并提供了使用defineAsyncComponent和顶层await等方法的解决方案,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Vue2中Class Component的使用指南

    Vue2中Class Component的使用指南

    Vue.js 以其简单易用和灵活性受到了广大开发者的喜爱,然而,随着项目的复杂度增加,组件的管理和组织也变得越来越重要,下面我们就来看看如何通过vue-class-component编写更加优雅和结构化的组件
    2024-11-11
  • 一篇文章带你了解vue路由

    一篇文章带你了解vue路由

    这篇文章主要为大家详细介绍了vue的路由,路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源,本文具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 关于vite.config.ts文件的配置方式

    关于vite.config.ts文件的配置方式

    这篇文章主要介绍了关于vite.config.ts文件的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 浅谈el-table中使用虚拟列表对对表格进行优化

    浅谈el-table中使用虚拟列表对对表格进行优化

    我们会经常使用表格,如果数据量大就直接可以分页,如果多条可能会影响表格的卡顿,那么应该如何进行优化,感兴趣的可以了解一下
    2021-08-08

最新评论