Vue项目MQTT客户端详细配置

MQTT 是用于物联网 (IoT) 的 OASIS 标准消息传递协议。它被设计为一种极其轻量级的发布/订阅消息传输,非常适合连接具有小代码占用空间和最小网络带宽的远程设备。

那么如何在VUE项目中使用MQTT协议

npm install mqtt --save

新建mqtt.js文件,将配置填写好,具体如下


export default class myMqtt {
  const mqttOptions = {
    host: '192.168.0.133',
    port: 8083,
    username: 'admin',
    password: 'public',
    protocolId: 'client_from_kk_web'
  }
  
  constructor (topic, callBack) {
    this.options = mqttOptions
    this.topic = topic
    this.mqttConnect()
    this.callBack = callBack
  }
  mqttConnect () {
    const client = new Paho.MQTT.Client(this.options.host, this.options.port, this.options.protocolId)// params: host port clientId
    const _options = {
      // Params:timeout userName password willMessage keepAliveInterval cleanSession useSSL invocationContext onSuccess onFailure hosts ports mqttVersion
      userName: this.options.username,
      password: this.options.password,
      timeout: 10, // connect timeout
      keepAliveInterval: 60, // connect keepalive time
      onSuccess: () => {
        console.log(`连接成功,订阅主题 ${this.topic}`);
        client.subscribe(this.topic, {qos: 2}) // subscribe theme // QOS(0:at most once; 1: at least once; 2: exactly once )  
      },
      onFailure: (error) => {
        console.log('连接失败', error)
      }
    }
    client.onConnectionLost = responseObject => {
      this.onConnectionLost(responseObject)
    }
    client.onMessageArrived = message => {
      this.callBack && this.callBack(message.payloadString) 
    }
    client.connect(_options)
    this.destroyed = client.disconnect
  }
  onConnectionLost (responseObject) {
    if (responseObject.errorCode !== 0) {
      console.log(`主题${this.topic}连接已断开,正在重新连接。。。`);
      this.mqttConnect()
    }
  }
  onMessageArrived (message) {
    // const msg = JSON.parse(message.payloadString);
    this.callBack && this.callBack(typeof msg === 'string' ? message : JSON.parse(message))
  }
}

在main.js中引入mqtt.js

import myMqtt from './mqtt.js'

之后再创建mqtt实例,订阅主题即可。

注意:
如果你的mqtt报

errorcode: 8
errorMessage: “AMQJS0008I Socket closed.”

在这里插入图片描述

那么90%是你的clientId冲突了,最简单的办法是把上述代码中的protocolId改为“”,这样mqtt会自动分配clientId。最好的办法还是给protocolId设置一个动态值。

Vue项目创建并使用MQTT以及MQTT管理工具

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮炭烤策划

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值