VUE3+mqtt封装,解决多页面使用需重复连接等问题

本文介绍了如何在Vue3项目中封装mqtt服务,以解决多页面重复连接和配置的问题。通过将mqtt服务整合到Vuex中,确保连接和订阅只需进行一次,接收的消息存储在Vuex中方便共享。详细步骤包括安装mqtt.js、暴露Vue实例、编写mqtt配置文件以及在页面中引入和使用。

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

场景:在做的一个项目中多个页面都需要使用到mqtt接收消息,但这样的话每个页面就都需要连接一次mqtt,并且要再次配置options信息、订阅主题、接收消息,非常的不方便,因此琢磨将mqtt封装到vuex中,使其可以多页面通用,这样只需要连接订阅一次,接收到的消息可以存储在vuex中。
mqtt在线测试工具:http://www.emqx.io/online-mqtt-client

一、安装mqtt

npm install mqtt

二、暴露出main.js中的vue实例

使用export default暴露出app

import {
   
    createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

const app = createApp(App)

app.use(ElementPlus)
app.use(store).use(router).mount('#app')

export default app

三、封装mqtt

将mqtt服务封装到VUEX中,可以解决多页面需要用到mqtt接收消息时,每个页面都要再次配置、连接、订阅主题等问题

import {
   
    createStore } from 'vuex'
import main from "../main";//main.ts文件中要暴露app
import router from '@/router';// 引入vuex
export default createStore({
   
   
  state: {
   
   
    topics: [],//订阅话题
  },
  mutations: {
   
   
    //mqtt服务
    MQTT_SERVICE(state, event){
   
   
      // mqtt连接成功
      main.config.globalProperties.$mqtt.on('connect', (e) => {
   
   
        console.log('连接成功:', e)
        // console.log(state.topics)
        main.config.</
可以将MQTT封装成一个Vue插件,并将其注册到Vue实例中,这样就能够在多个组件中使用它了。 首先,我们要安装MQTT的npm包: ``` npm install mqtt --save ``` 然后,我们创建一个mqtt.js文件,将MQTT封装成一个插件: ```js import mqtt from &#39;mqtt&#39; const mqttPlugin = { install (Vue, options) { Vue.prototype.$mqtt = mqtt.connect(options.host, options.options) } } export default mqttPlugin ``` 在这里,我们使用Vue的插件机制,在Vue实例中注册了一个全局的$mqtt属性,可以在任意组件中使用。 我们还要在main.js文件中引入mqtt插件: ```js import Vue from &#39;vue&#39; import App from &#39;./App.vue&#39; import mqttPlugin from &#39;./mqtt.js&#39; Vue.use(mqttPlugin, { host: &#39;mqtt://localhost:1883&#39;, options: { clientId: &#39;myClientId&#39; } }) new Vue({ render: h => h(App) }).$mount(&#39;#app&#39;) ``` 在这里,我们使用Vue.use()方法来安装mqtt插件,并传递了host和options参数,以便连接MQTT服务器。 现在,我们就可以在任意组件中使用$mqtt属性来连接和订阅MQTT主题了: ```js export default { mounted () { this.$mqtt.on(&#39;connect&#39;, () => { console.log(&#39;MQTT connected&#39;) this.$mqtt.subscribe(&#39;my/topic&#39;) }) this.$mqtt.on(&#39;message&#39;, (topic, payload) => { console.log(`Received message on topic ${topic}: ${payload.toString()}`) }) }, beforeDestroy () { this.$mqtt.end() } } ``` 在这个例子中,我们在组件的mounted()钩子中连接MQTT服务器,并订阅了一个主题。在message事件中,我们打印出了收到的消息。 最后,在组件的beforeDestroy()钩子中,我们关闭了MQTT连接。 这样,我们就成功地封装MQTT,并能够在多个组件中使用了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值