vue中利用mqtt服务端实现即时通讯的步骤记录


Posted in Vue.js onJuly 01, 2021

MQTT协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。

MQTT是轻量级基于代理的发布/订阅的消息传输协议,它可以通过很少的代码和带宽和远程设备连接。例如通过卫星和代理连接,通过拨号和医疗保健提供者连接,以及在一些自动化或小型设备上,而且由于小巧,省电,协议开销小和能高效的向一和多个接收者传递信息,故同样适用于称动应用设备上。

vue利用mqtt服务端实现即时通讯

在大部分项目中,前后端交互只是前端请求后端的接口,拿到数据后再处理,前段时间我手上的一个项目需要用到mqtt,使用后觉得真神奇,只需要订阅就能实时获取到数据,废话不多说,妹妹给你们上步骤!

1.在vue项目中安装mqtt.js

npm install mqtt --save

2.在项目的main.js或者在需要用到的vue页面上引用

import mqtt from 'mqtt'

3.在vue页面的data中定义一个client对象,方便后面使用

client: {}

ok,接下来就是重点了,首先我们得连接mqtt,连接mqtt的方法有个回调函数,我接下来就把订阅的方法写在连接成功后的回调里,这样能保证不出错,上代码!

4.连接mqtt并订阅

//连接服务器
    connect() {
      let options = {
        username: "xxx",
        password: "xxxx",
        cleanSession : false,
        keepAlive:60,
        clientId: 'mqttjs_' + Math.random().toString(16).substr(2, 8),
        connectTimeout: 4000
      }
      this.client = mqtt.connect('ws://192.168.xxx.xx:8083/mqtt',options);
      this.client.on("connect", (e)=>{
        console.log("成功连接服务器:",e);
        //订阅三个名叫'top/#', 'three/#'和'#'的主题
        this.client.subscribe(['top/#', 'three/#', '#'], { qos: 1 }, (err)=> {
          if (!err) {
            console.log("订阅成功");
            //向主题叫“pubtop”发布一则内容为'hello,this is a nice day!'的消息
            this.publish("pubtop", 'hello,this is a nice day!')
          } else {
            console.log('消息订阅失败!')
          }
        });
      });
      //重新连接
      this.reconnect()
      //是否已经断开连接
      this.mqttError()
      //监听获取信息
      this.getMessage()
    }

5.发布消息方法

//发布消息@topic主题  @message发布内容
    publish(topic,message) {
      if (!this.client.connected) {
        console.log('客户端未连接')
        return
      }
      this.client.publish(topic,message,{qos: 1},(err) => {
        if(!err) {
          console.log('主题为'+topic+ "发布成功")
        }
      })
    }

6.监听并接收上面订阅的三个主题的信息

//监听接收消息
    getMessage() {
      this.client.on("message", (topic, message) => {
        if(message) {
          console.log('收到来着',topic,'的信息',message.toString())
          const res = JSON.parse(message.toString())
          //console.log(res, 'res')
          switch(topic) {
             case 'top/#' :
               this.msg = res
               break;
             case 'three/#' :
               this.msg = res
               break;
             case 'three/#' :
               this.msg = res
               break;
             default:
               return
               this.msg = res
           }
           this.msg = message
        }
      });
    },

7.监听服务器是否连接失败

//监听服务器是否连接失败
    mqttError() {
      this.client.on('error',(error) => {
        console.log('连接失败:',error)
        this.client.end()
      })
    },

8.取消订阅

//取消订阅
    unsubscribe() {
      this.client.unsubscribe(this.mtopic, (error)=> {
        console.log('主题为'+ this.mtopic+'取消订阅成功',error)
      })
    },

9.断开连接

//断开连接
    unconnect() {
      this.client.end()
      this.client = null
      console.log('服务器已断开连接!')
    },

10.监听服务器重新连接

//监听服务器重新连接
    reconnect() {
      this.client.on('reconnect', (error) => {
          console.log('正在重连:', error)
      });
    },

总结

到此这篇关于vue中利用mqtt服务端实现即时通讯的文章就介绍到这了,更多相关vue用mqtt即时通讯内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
开发一个封装iframe的vue组件
Mar 29 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
Vue实现tab导航栏并支持左右滑动功能
Vue3.0写自定义指令的简单步骤记录
vue.js Router中嵌套路由的实用示例
Jun 27 #Vue.js
vite+vue3.0+ts+element-plus快速搭建项目的实现
vue-router中hash模式与history模式的区别
You might like
简单的php 验证图片生成函数
2009/05/21 PHP
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
php数组一对一替换实现代码
2012/08/31 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
javascipt基础内容--需要注意的细节
2013/04/10 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
python批量提取word内信息
2015/08/09 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python绘制趋势图的示例
2020/09/17 Python
科颜氏加拿大官方网站: Kiehl’s加拿大
2016/08/16 全球购物
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
小学生国旗下演讲稿
2014/04/25 职场文书
小区文明倡议书
2014/05/16 职场文书
股份合作协议书
2014/09/10 职场文书
义诊活动总结
2015/02/04 职场文书
解决redis批量删除key值的问题
2022/03/23 Redis
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python