mqtt vue3 封装 utils 创建mqtt.ts

import mqtt from 'mqtt'
import { ref, onUnmounted } from 'vue'
import { useUserStore } from '@/stores'
import { unref } from 'vue'

const host = 'ws://xxxxxxxx:8083/mqtt' //服务器的地址
const options = {
  clean: true, // true: 清除会话, false: 保留会话
  connectTimeout: 4000, // 超时时间
  clientId: 'h5_emqx' + Math.random().toString(16).slice(3), //不填默认随机生成一个ID
  username: '111111', //用户名
  password: '123456', //密码
  keepalive: 60,
  reconnectPeriod: 4000, // 重连时间间隔
}
// 导出MQTT客户端实例
export let marketStompClient: mqtt.Client | null = null

// 创建MQTT连接
export function createMarketWS() {
  const userStore = useUserStore()

  // 如果已经连接,则直接返回
  // if (marketStompClient && marketStompClient.connected) {
  //   console.log('12312312');
  //   return
  // }

  // 创建 MQTT 客户端实例
  marketStompClient = mqtt.connect(host, options)

  // 设置客户端调试模式(可选)
  marketStompClient.on('connect', () => {
    if (userStore.isMarket === 'market') {
      const marketMQTTTopic = [
        ‘主题1’,‘主题2’
      ]
      // 连接成功后订阅主题
      marketStompClient.subscribe(marketMQTTTopic, (err: any) => {
        if (!err) {
          // console.log(marketMQTTTopic)
        } else {
          console.error(err)
        }
      })
    } else {
      const marketMQTTTopic = [
       主题1’,‘主题2’
      ]
      marketStompClient.subscribe(marketMQTTTopic, (err: any) => {
        if (!err) {
          // console.log(marketMQTTTopic)
        } else {
          console.error(err)
        }
      })
    }
  })

  // 处理连接错误
  marketStompClient.on('error', (err: any) => {
    createMarketWS()
    console.error(err)
  })
  // 处理接收到的消息
  marketStompClient.on('message', (topic: any, message: any) => {
    // 处理消息内容
    let parts = topic
    if (firstPart == '主题1') {
      var data = JSON.parse(message)
      if (data.direction === 'BUY' && data.symbol == unref(userStore.marketSymbol)) {
        userStore.setMarketBuyList(data.items)
      }

      if (data.direction === 'SELL' && data.symbol == unref(userStore.marketSymbol)) {
        userStore.setMarketSellList(data.items)
      }
    } else if (firstPart == '主题2') {
      var data = JSON.parse(message)
      // console.log(data);
      if (data.direction === 'BUY' && data.symbol == unref(userStore.swapSymbol)) {
        userStore.setSwapBuyList(data.items)
      }

      if (data.direction === 'SELL' && data.symbol == unref(userStore.swapSymbol)) {
        userStore.setSwapSellList(data.items)
      }
    } else if (firstPart == '') {
      var data = JSON.parse(message)
      if (userStore.isMarket === 'market' && userStore.marketSymbol === data.symbol) {
        userStore.setKline24hData(data)
        userStore.setMarketBuyHighestPrice(data.close)
      }
    } else if (firstPart == '') {
      var data = JSON.parse(message)
      if (userStore.isMarket === 'swap' && userStore.swapSymbol === data.symbol) {
        userStore.setKline24hData(data)
        userStore.setSwapBuyHighestPrice(data.close)
      }
    } else if (firstPart == '') {
      var data = JSON.parse(message)
      userStore.setMarketTradeRecord(data)
    } else if (firstPart == '') {
      var data = JSON.parse(message)
      if (data.period == unref(userStore.resolution) && userStore.isMarket === 'market' && userStore.marketSymbol == data.symbol) {
        userStore.setKlineData(data)
      }
    } else if (firstPart == '') {
      var data = JSON.parse(message)
      userStore.setSwapTradeRecord(data)
    } else if (firstPart == '') {
      var data = JSON.parse(message)
      if (data.period == unref(userStore.resolution) && userStore.isMarket === 'swap' && userStore.swapSymbol == data.symbol) {
        userStore.setKlineData(data)
      }
    }
  })
}
export function unSubscribeMarketMQTT() {
  const userStore = useUserStore()
  if (userStore.isMarket === 'market') {
    const marketMQTTTopic = [
     主题1’,‘主题2’
    ]
    // 检查 MQTT 客户端是否已连接并且已初始化
    if (marketStompClient && marketStompClient.connected) {
      // 取消订阅市场更新主题
      marketMQTTTopic.forEach((topic) => {
      marketStompClient.unsubscribe(topic, (err: any) => {
        console.log(err)
      })
    })
    }
  } else {
    const marketMQTTTopic = [
    主题1’,‘主题2’
    ]
    // 检查 MQTT 客户端是否已连接并且已初始化
    if (marketStompClient && marketStompClient.connected) {
      // 取消订阅市场更新主题
      marketMQTTTopic.forEach((topic) => {
      marketStompClient.unsubscribe(topic, (err: any) => {
        console.log(err)
      })
    })
    }
  }
}
export function disMqttconnect() {
  marketStompClient.end(true)
  marketStompClient = null
}

需要  连接mqtt的页面   

onLoad(() => {

  createMarketWS()

}

webpack 3   版本对应的   mqtt版本  就是3      高版本可以下最新版本的mqtt 否则不兼容,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值