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 相关文章推荐
vue+iview分页组件的封装
Nov 17 Vue.js
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
vue-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue 递归组件的简单使用示例
Jan 14 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue3.0 自适应不同分辨率电脑的操作
Feb 06 Vue.js
Vue基本指令实例图文讲解
Feb 25 Vue.js
vue+springboot实现登录验证码
May 27 Vue.js
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 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批量上传的实现代码
2013/06/09 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
JS中的异常处理方法分享
2013/12/22 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
[41:56]Spirit vs Liquid Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
村级换届选举方案
2014/05/10 职场文书
护士先进个人总结
2015/02/13 职场文书
分家协议书范本
2016/03/22 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
python某漫画app逆向
2021/03/31 Python
图解上海144收音机
2021/04/22 无线电