vue 项目中使用 mqtt

文章介绍了如何在HTML中通过CDN引入MQTT库,并在Vue组件中封装MQTT连接函数,包括连接、订阅、发布、取消订阅和断开连接操作,以及在Vue页面中实际使用的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在html 中用cdn方式引入

 <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>

2、封装代码 mqtt_connect.js

// import * as mqtt from 'mqtt/dist/mqtt.min'
// 不知道为什么 我用引入的方式不成,就在html 用的cdn方式接入了
import { Message } from 'element-ui'
let client = {}
// 连接服务器
/**
 * params:
 * @options 参数
 */
export function connectFn({ username, password, url, topic, clientId }, callBack) {
  const options = {
    username,
    password,
    cleanSession: false,
    keepAlive: 10,
    clientId: clientId,
    connectTimeout: 4000
  }
  client = mqtt.connect(url, options)
  client.on('connect', (e) => {
    Message.success('成功连接服务器')
    console.log('成功连接服务器:', e)
    // 订阅主题
    console.log(topic, 'topictopic')
    client.subscribe(topic, { qos: 1 }, (err) => {
      if (!err) {
        Message.success('订阅成功')
        console.log('订阅成功')
      } else {
        Message.error('消息订阅失败!')
        console.log('消息订阅失败!')
      }
    })
  })
  // 重新连接
  //   reconnect()
  // 是否已经断开连接
  mqttError()
  // 监听获取信息
  getMessage(callBack)
}
// 发布消息 @topic主题  @message发布内容
export function publish(topic, message) {
  if (!client.connected) {
    console.log('客户端未连接')
    return
  }
  client.publish(topic, message, { qos: 1 }, (err) => {
    if (!err) {
      console.log('主题为' + topic + '发布成功')
    }
  })
}
// 监听接收消息
function getMessage(callBack) {
  client.on('message', (topic, message) => {
    if (message) {
      callBack(topic, message)
    }
  })
}
// 监听服务器是否连接失败
function mqttError() {
  client.on('error', (error) => {
    console.log('连接失败:', error)
    client.end()
  })
}
// 取消订阅
export function unsubscribe(topicList) {
  client.unsubscribe(topicList, (error) => {
    console.log('主题为' + topicList + '取消订阅成功', error)
  })
}
// 断开连接
export function unconnect() {
  client.end()
  client = null
  Message.warning('服务器已断开连接!')
  console.log('服务器已断开连接!')
}
// 监听服务器重新连接
function reconnect() {
  client.on('reconnect', (error) => {
    console.log('正在重连:', error)
  })
}

3.vue页面中使用

<script>
import { connectFn, unsubscribe, unconnect } from '@/utils/mqtt_connect'

export default {
  data() {
    return {
      topicList: []
    }
  },
  mounted() {
    
    this.topicList.push(`xxxxx`)
    connectFn(
      {
        url: 'xxxxx',
        username: 'xxx',
        password: 'xxx',
        topic: `xxxx`,
        clientId: `xxxx`
      },
      this.getMessage
    )
  },
  beforeDestroy() {
    unsubscribe(this.topicList)
    unconnect()
  },

  methods: {
    getMessage(topic, message) {
      if (message) {
        console.log('收到来着', topic, '的信息', message.toString())
        const res = JSON.parse(message.toString())
        switch (topic) {
          case 'topic/username':
            this.username = res
            break
          case 'topic/class':
            this.class = res
            break
          default:
            return
        }
      }
    }
  }
}
</script>

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 &#39;mqtt&#39;; ``` 3. 创建MQTT客户端:在Vue组件中,创建一个MQTT客户端实例,并连接到MQTT代理: ```javascript const client = mqtt.connect(&#39;mqtt://mqtt.example.com&#39;); // 替换为你的MQTT代理地址 ``` 4. 监听MQTT连接状态:可以监听MQTT客户端的连接状态,以便在连接成功或失败时进行处理: ```javascript client.on(&#39;connect&#39;, function () { console.log(&#39;Connected to MQTT broker&#39;); }); client.on(&#39;error&#39;, function (error) { console.error(&#39;MQTT connection error:&#39;, error); }); ``` 5. 订阅和接收消息:可以订阅一个或多个主题,并在接收到消息时进行处理: ```javascript client.subscribe(&#39;topic1&#39;); client.on(&#39;message&#39;, function (topic, message) { console.log(&#39;Received message:&#39;, message.toString()); }); ``` 6. 发布消息:可以使用`client.publish()`方法发布消息到指定的主题: ```javascript client.publish(&#39;topic1&#39;, &#39;Hello MQTT&#39;); ``` 这些是基本的使用步骤,你可以根据需要进行扩展和自定义。记得在不需要时断开MQTT连接: ```javascript client.end(); ``` 请注意,这只是一个简单的示例,实际使用时可能需要处理更多的逻辑和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值