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 相关文章推荐
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue 数据操作相关总结
Dec 17 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
vuex的使用步骤
Jan 06 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
解决vue-router的beforeRouteUpdate不能触发
Apr 14 Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
使用正则表达式的格式化与高亮显示json字符串
2014/12/03 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
详解Python中dict与set的使用
2015/08/10 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
高二地理教学反思
2014/01/24 职场文书
电工技术比武方案
2014/05/11 职场文书
公路绿化方案
2014/05/12 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
MySQL系列之开篇 MySQL关系型数据库基础概念
2021/07/02 MySQL
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python