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+iView+.Net Core上传图片的方法示例

    使用VUE+iView+.Net Core上传图片的方法示例

    这篇文章主要介绍了使用VUE+iView+.Net Core上传图片的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Vue倒计时3秒后返回首页Demo(推荐)

    Vue倒计时3秒后返回首页Demo(推荐)

    这篇文章主要介绍了Vue倒计时3秒后返回首页Demo,倒计时结束后要清除计时器,防止内存泄漏,本文通过示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-11-11
  • vant list组件滚动保留滚动条位置

    vant list组件滚动保留滚动条位置

    这篇文章主要介绍了vant list组件滚动保留滚动条位置,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Vue实现轮播图组件的封装

    Vue实现轮播图组件的封装

    Vue轮播图组件的封装可通过封装组件、使用插件、配置化等方式实现,主要包括图片预加载、定时轮播、无限滚动、手势滑动、响应式布局等功能,实现方式可使用Vue的生命周期函数、自定义事件、计算属性等技术
    2023-04-04
  • 基于Vue uniapp实现贪吃蛇游戏

    基于Vue uniapp实现贪吃蛇游戏

    贪吃蛇游戏想必是很多70、80后的回忆,一直到现在也深受大家的喜欢。本文将利用Vue+uniapp实现这一经典的游戏,感兴趣的可以了解一下
    2022-04-04
  • vue使用Vue.extend方法仿写个loading加载中效果实例

    vue使用Vue.extend方法仿写个loading加载中效果实例

    在vue中提供v-loading命令,用于div的loading加载,下面这篇文章主要给大家介绍了关于vue使用Vue.extend方法仿写个loading加载中效果的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • vue+element-ui+ajax实现一个表格的实例

    vue+element-ui+ajax实现一个表格的实例

    下面小编就为大家分享一篇vue+element-ui+ajax实现一个表格的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 通用vue组件化展示列表数据实例详解

    通用vue组件化展示列表数据实例详解

    组件化开发能大幅提高应用的开发效率、测试性、复用性等,下面这篇文章主要给大家介绍了关于通用vue组件化展示列表数据的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Vue实现Tab标签路由效果并用Animate.css做转场动画效果的代码

    Vue实现Tab标签路由效果并用Animate.css做转场动画效果的代码

    这篇文章主要介绍了Vue实现Tab标签路由效果,并用Animate.css做转场动画效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Vue编译器源码分析compileToFunctions作用详解

    Vue编译器源码分析compileToFunctions作用详解

    这篇文章主要为大家介绍了Vue编译器源码分析compileToFunctions作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论