微信小程序 --MQTT连接

文章介绍了MQTT协议的基本概念,以及如何在微信小程序中创建MQTT连接,包括引入mqtt.js库,设置连接参数,监听连接状态,以及实现订阅、发布和关闭连接的方法。内容适用于物联网和移动应用的实时通信场景。
摘要由CSDN通过智能技术生成

一、MQTT概念

MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP的基础上,由IBM在1999年发布。它最大的优点是以极少的代码和有限的带宽,为连接远程设备提供可靠的消息服务。作为一种低开奥、低带宽占用的及时通讯协议,使其在物联网、小型设备、移动应用等方面有广泛的应用。

二、小程序创建MQTT连接

1.在小程序的util包中引入mqtt.js与mqtt.min.js也可以只导入mqtt.min.js单包

 

mqtt.js包下载链接:mqtt.js

mqtt.min.js包下载链接:mqtt.min.js

2.在utlis中创建mqtt连接的公共方法:

        可在微信小程序中实例化该公共方法做到随取随用

// 获取应用实例
const app = getApp()
var mqtt = require('../utils/mqtt.min.js') //根据自己存放的路径修改


var mqtt_connect = {
    connection: function () {
        /**存储于app.js中的全局变量*/
        const { username } = app.globalData;//mqtt连接的用户名
        const { password } = app.globalData;//mqtt连接的密码
        const { reconnectPeriod } = app.globalData;//接收到的信息
        const { connectTimeout } = app.globalData;//重连时间
        const { host } = app.globalData;//连接地址
        try {
            // that.setValue("conenctBtnText", "连接中...");
            const clientId = new Date().getTime();//mqtt的连接ID
            app.globalData.client = mqtt.connect(`wxs://${host}/mqtt`, {
                username,
                password,
                reconnectPeriod,
                connectTimeout,
                clientId,
            });

            //注释部分的内容为mqtt连接状态监听,可根据自己的需求进行开启
            // app.globalData.client.on("connect", () => {

            //     app.globalData.client.on("error", (error) => {
            //         console.log("onError", error);
            //     });

            //     app.globalData.client.on("reconnect", () => {
            //         console.log("reconnecting...");
            //     });

            //     app.globalData.client.on("offline", () => {
            //         console.log("Offline");
            //     });


            // });
        } catch (error) {
            console.log("mqtt.connect error", error);
        }

    },

    /**关闭MQTT连接 */
    onConnectionLost() {
        app.globalData.client.end = (responseObject) => {
            console.log("mqtt连接关闭!");
        }
    },


    /**
     * 接收信息的方法
     */
    getMessage() {
        app.globalData.client.on("message", (topic, payload) => {
            // console.log(`收到消息 - Topic: ${topic},Payload: ${payload}`)
            app.globalData.currMsg = JSON.parse(payload);
            console.log(typeof payload)
        });
    },


    /**
     * 订阅主题
     */
    subscribe(subTopic) {
        if (app.globalData.client) {
            app.globalData.client.subscribe(subTopic)
            return
        }
    },
    /**
     * 取消订阅
     */
    unsubscribe(subTopic) {
        if (app.globalData.client) {
            app.globalData.client.unsubscribe(subTopic)
            wx.showModal({
                content: `成功取消订阅主题:${subTopic}`,
                showCancel: false,
            })
            return
        }
    },

    /**
    * 发布信息
    */
    publish(pubTopic, pubMsg) {
        console.log('发送mqtt')
        if (app.globalData.client) {
            app.globalData.client.publish(pubTopic, pubMsg)
            return
        }
    },
}


//导出MQTT连接的方法
module.exports = {
    mqtt_connect: mqtt_connect
}

app.js中的内容:

// app.js
App({
  onLaunch() {
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
      }
    })
  },
  globalData: {
    client: null,//mqtt连接对象
    host: "",//连接的服务器域名地址
    username: "test",//连接的用户名
    password: "test",//连接的密码
    subTopic: "",//订阅的Topic
    pubTopic: "",//发布信息的Topic
    pubMsg: "Hello World",//发布的信息
    receivedMsg: "",//收到的信息
    currMsg: "",//当前信息
    mqttStatus: 0,//判断mqtt的连接状态
    // reconnectPeriod: 1000, // 1000毫秒,设置为 0 禁用自动重连,两次重新连接之间的间隔时间
    // connectTimeout: 30 * 1000, // 30秒,连接超时时间
  }
})
  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值