TypechoJoeTheme

Strjson博客-专注于各种精品源码、精品软件、技术教程分享、黑客技术、破解教程(爱你在心口难开、没事写一写)

统计

uniapp连接mqtt进行消息的订阅与发布

子沫博主
2022-11-10
/
1 评论
/
1,718 阅读
/
138 个字
/
百度已收录
11/10
本文最后更新于2022年11月10日,已超过741天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
  1. 先安装Mqtt包,到你项目中的 node_modules目录下执行一下安装命令
  npm install mqtt --save
  1. 创建一个配置文件js,建议放到utils目录下 mqtt.js
export const MQTT_IP = ''//mqtt地址端口, 使用emqx时一定要加mqtt
const MQTT_USERNAME = ''//mqtt用户名
const MQTT_PASSWORD = ''//密码

export const MQTT_OPTIONS = {
    connectTimeout: 5000,
    clientId: '',
    username: MQTT_USERNAME,
    password: MQTT_PASSWORD,
    clean: false,
    keepalive: 15,
    protocolVersion: 4, //MQTT连接协议版本
    resubscribe: true,
    reconnectPeriod: 1000,
}
  1. 在common中定义一个公用的mqtt.js各个需要使用的地方调用即可
// "use strict";
// Object.defineProperty(exports, "__esModule", {
//     value: !0
// });
import { v4 } from 'uuid';
    import {
        MQTT_IP,
        MQTT_OPTIONS
    } from '@/utils/mqtt.js';
var mqtt = require('mqtt/dist/mqtt.js')
var client;
var topic=[
    'online',
    'movie',
    'update',
    'notice'
];
var init=function(){
    let userInfos = uni.getStorageSync('userInfo');
    console.log('用户信息:'+userInfos)
    MQTT_OPTIONS.clientId =userInfos !=""?userInfos.mobile+'':v4();
    // #ifdef H5
    client = mqtt.connect('ws://' + MQTT_IP, MQTT_OPTIONS)
    // #endif
    // #ifdef MP-WEIXIN||APP-PLUS
    client = mqtt.connect('wx://' + MQTT_IP, MQTT_OPTIONS)
    // #endif
    client.on('connect', function() {
        console.log('连接成功')
        for (var i = 0; i < topic.length; i++){
                client.subscribe(topic[i], function(err) {
                    if (!err) {
                        console.log('订阅成功')
                    }
                })                    
        }
    }).on('reconnect', function(error) {
        console.log('正在重连...')
        subscribeTopic();
    }).on('error', function(error) {
        console.log('连接失败...', error)
    }).on('end', function() {
        console.log('连接断开')
    }).on('message', function(topic, message) {
        console.log('接收推送信息:', message.toString());
        doSomeThing(topic,JSON.parse(message.toString()));
    }).on('close',function(re){
        console.log('链接关闭')
    })
},
sendMessage=function(t,str){
    client.publish(t, str, (e) => {
           console.log(e)
    })
},
doSomeThing=function(t,str){
    console.log('接收到的Topic:'+t)
    switch (t){
        case 'update':
            break;
        case 'movie':
                plus.push.createMessage(str.title, {}, {} );
                plus.push.addEventListener('click',msg=> {
                    uni.navigateTo({
                        url:"/pages/detail/index?id="+str.vid
                    })
                });
            break;
        case 'online':
            break;
        case 'notice':
            break;
        default:
            break;
    }
},
subscribeTopic=function(){
    for (var i = 0; i < topic.length; i++){
            client.subscribe(topic[i], function(err) {
                if (!err) {
                    console.log('订阅成功')
                }
            })                    
    }
};
export default {
        init: init,
        sendMessage: sendMessage,
        subscribeTopic: subscribeTopic,
        doSomeThing:doSomeThing
    };
    
  1. 到main.js中定义mqttClient
import mqttClient from '@/common/mqtt';

Vue.prototype.$mqtt = mqttClient;
  1. 具体mqtt的使用
var s=e.device.deviceBrand;                        this.$mqtt.sendMessage('online','{"type":"upMB","brand":"'+s+'"}');// 进行线上的Topic发布
朗读
赞(2)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

Strjson博客-专注于各种精品源码、精品软件、技术教程分享、黑客技术、破解教程(爱你在心口难开、没事写一写)

本文链接:

https://jpgke.com/jiaocheng/413.html(转载时请注明本文出处及文章链接)

评论 (1)
  1. 子沫 闲逛
    Windows 10 · Google Chrome

    2022-11-10 回复

互动读者

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

360实时热点

  • 获取失败!

标签云

最新回复

  1. 试试看闲逛
    2021-12-14
  2. 555闲逛
    2021-12-07
  3. def闲逛
    2021-11-28
  4. 紫夜闲逛
    2021-11-28
  5. 666闲逛
    2021-10-05