vue项目中使用mqtt

从去年十一到现在一直在忙项目,赶进度,导致自己也没写笔记。正好今天项目已经进入收尾阶段,腾出时间慢慢的梳理了下在项目开发中遇到的难点及技术点,目的是总结下,一边加深巩固。作为新年开始的第一篇笔记,自己给自己定了一个目标,不管项目如何紧,自己至少都要保证每个月写一篇笔记。

mqtt

关于mqtt的介绍和理论大家在看到这篇文章之前应该已经查阅了不少,这里我就不过多介绍,只是把自己实际项目中开发的过程记录下来。
因为mqtt是即时通讯的技术(之前另外一个项目用的是融云web,这个需要付费,项目不想过多花费只能使用mqtt),因此从app端发送过来的消息,web端是直接收不到的,需要app端发给后端,后端转换处理后再发给web端。这个逻辑得搞清楚。

安装依赖

npm i mqtt

页面引用

import mqtt from "mqtt"

第一步先调取获取mqtt连接信息接口

在这里插入图片描述

//获取mqtt连接信息
 mqttApiData(roomCode) {
      mqttAPI(this.model).then(res=>{
          let item = res.data;
         if(res.code == 200){
             this.connectMqtt(item.clientId,item.port,item.userName,item.passWord,item.host,roomCode);
         }
      })
  },

第二步链接mqtt,订阅主题,链接成功接收消息

// mqtt链接
        connectMqtt () {
             const options={
                connectTimeout:4000,
                clean: true, // 保留会话
                connectTimeout: 4000, // 超时时间
                reconnectPeriod: 4000, // 重连时间间
                clientId:'clientId-5043879312294918',//唯一值
                port:8083,//端口
                host:'119.6.180.200',//地址
                username:'Android5043879312294918',//id            		 
                password:'eyJhbGciOiJIUzI1NiJ9.eyJ3NX0.hd-DD1_wCyQVcLTP_R4PqMYygWlebHjFQNTnSjeUuoo',//密码
              }
              this.client=mqtt.connect('ws://119.3.180.200/mqtt',options);
              this.client.on('connect',e=>{
                console.log('服务器链接成功');
                this.client.subscribe('/room/comment/${activityCode}',{qos:0},err=>{
                    debugger
                    if(!err){
                      console.log('订阅成功');
                    }else{
 			console.log('订阅失败');
}
                })
              })
              //信息监听事件
              this.client.on('message',(topic,message)=>{
                console.log('收到'+message.toString());
              })
              //重连
              this.client.on('reconnect',(err)=>{
                console.log('正在进行重连',err);
              })
              //失败
              this.client.on('error',(err)=>{
                console.log('连接失败',err);
              })
        },

链接成功后,在浏览器控制台可以看到打印出来的信息。
在这里插入图片描述

创建链接 , 链接字符串,通过协议指定使用的链接方式

  1. ws 未加密 WebSocket 链接
  2. wss 加密 WebSocket 链接
  3. mqtt 未加密 TCP链接
  4. mqtts 加密 TCP链接
  5. wxs 微信小程序链接
  6. alis支付宝小程序链接

第三步,在页面中展示接收到的消息

<div class="live-room-comment-item flex" v-for="(item, index) in mqttList" :key="index">
            <div class="live-item-user flex">
                   <img :src="item.avatar" class="avatar"/>
                    <span class="live-item-user-name">{{item.nickName}}</span>
              </div>
              <div class="live-comment-content">{{item.commentContent}}</div>
              <div class="live-comment-time">{{item.createTime}}</div>
               <div class="live-comment-handle">
                     <el-button type="danger" size="mini"  @click="handleShieldComment(commentId,commentStatus)">屏蔽</el-button>
                     <el-button type="info" size="mini"  @click="handleShieldComment(commentId,commentStatus)">取消屏蔽</el-button>
                 </div>
 </div> 
export default {
   name: 'User',
     data() {
        return {
 			mqttList:[],
   		}
  },
methods:{
//信息监听事件
	this.client.on('message',(topic,message)=>{
	  console.log('收到'+message.toString());
	  let data = JSON.parse(message.toString());
	  let item = {};
	  item.nickName = data.nickName;
	  item.commentContent = data.commentContent;
	  item.avatar=data.avatar;
	  item.createTime=data.createTime;
	  this.mqttList.push(item);
	})
 }
}

第四步,在页面中展示历史数据

LiveRoomMqtt(activityCode,activityType){
            let params = {
                activityCode:activityCode,
                activityType:0
            }
            LiveRoomMqttList(params).then(res=>{
                this.mqttList = res.rows.map(item => {
                    if (item.avatar && item.avatar.indexOf('http') < 0) {
                        item.avatar = this.$store.getters.domains + item.avatar;
                    }
                    return item;
                });
                this.mqttList = this.mqttList;
            })
        },

链接不成功,报错可以让后端看下 服务的安全认证问题 , 后台配置 ,端口有没有打开。
在这里插入图片描述

以上就是实现mqtt链接信息,订阅主题,接收消息的步骤,因为代码在项目中,代码有点多,只能抽离出来实现的部分代码。希望能帮助到其他同学,也希望小伙伴们指正不足。

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue使用MQTT,你可以使用MQTT.js库来实现。以下是一些基本步骤: 1. 安装MQTT.js库:在你的Vue项目使用npm或yarn安装mqtt库: ``` npm install mqtt ``` 或 ``` yarn add mqtt ``` 2. 导入MQTT库:在你的Vue组件,导入mqtt库: ```javascript import mqtt from 'mqtt'; ``` 3. 创建MQTT客户端:在Vue组件,创建一个MQTT客户端实例,并连接到MQTT代理: ```javascript const client = mqtt.connect('mqtt://mqtt.example.com'); // 替换为你的MQTT代理地址 ``` 4. 监听MQTT连接状态:可以监听MQTT客户端的连接状态,以便在连接成功或失败时进行处理: ```javascript client.on('connect', function () { console.log('Connected to MQTT broker'); }); client.on('error', function (error) { console.error('MQTT connection error:', error); }); ``` 5. 订阅和接收消息:可以订阅一个或多个主题,并在接收到消息时进行处理: ```javascript client.subscribe('topic1'); client.on('message', function (topic, message) { console.log('Received message:', message.toString()); }); ``` 6. 发布消息:可以使用`client.publish()`方法发布消息到指定的主题: ```javascript client.publish('topic1', 'Hello MQTT'); ``` 这些是基本的使用步骤,你可以根据需要进行扩展和自定义。记得在不需要时断开MQTT连接: ```javascript client.end(); ``` 请注意,这只是一个简单的示例,实际使用时可能需要处理更多的逻辑和错误处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值