收藏
回答

微信小程序用mqtt.js连阿里物联网设备,为什么老是断开,小程序切到后台后马上就跟物联网设备断开?

微信小程序使用mqtt.js连阿里物联网设备,为什么连接上物联网设备后不定时的断开连接,另外小程序切换到后台后就会马上跟物联网设备断开连接,主要代码如下(劳烦各位大佬解惑):

import mqtt from'../../utils/mqtt.js';

const aliyunOpt = require('../../utils/aliyun/aliyun_connect.js');

let that = null;

Page({

    data:{

      client:null,//记录重连的次数

      reconnectCounts:0,//MQTT连接的配置

      options:{

        protocolVersion: 4, //MQTT连接协议版本

        clean: false,

        reconnectPeriod: 1000, //1000毫秒,两次重新连接之间的间隔

        connectTimeout: 30 * 1000, //1000毫秒,两次重新连接之间的间隔

        resubscribe: true, //如果连接断开并重新连接,则会再次自动订阅已订阅的主题(默认true)

        clientId: '',

        password: '',

        username: '',

      },

      aliyunInfo: {

        productKey: '**********', //阿里云连接的三元组 ,请自己替代为自己的产品信息!!

        deviceName: '**********', //阿里云连接的三元组 ,请自己替代为自己的产品信息!!

        deviceSecret: '****************', //阿里云连接的三元组 ,请自己替代为自己的产品信息!!

        regionId: 'cn-shanghai', //阿里云连接的三元组 ,请自己替代为自己的产品信息!!

        pubTopic: '/*********/**********/thing/event/property/post', //发布消息的主题

        subTopic: '/*********/**********/thing/service/property/set', //订阅消息的主题

      },

    },

onLoad:function(){

  that = this;

      let clientOpt = aliyunOpt.getAliyunIotMqttClient({

        productKey: that.data.aliyunInfo.productKey,

        deviceName: that.data.aliyunInfo.deviceName,

        deviceSecret: that.data.aliyunInfo.deviceSecret,

        regionId: that.data.aliyunInfo.regionId,

        port: that.data.aliyunInfo.port,

      });

      console.log("get data:" + JSON.stringify(clientOpt));

      let host = 'wxs://' + clientOpt.host;

      console.log("get data:" + JSON.stringify(clientOpt));

      this.setData({

        'options.clientId': clientOpt.clientId,

        'options.password': clientOpt.password,

        'options.username': clientOpt.username,

      })

      console.log("this.data.options host:" + host);

      console.log("this.data.options data:" + JSON.stringify(this.data.options));

      this.data.client = mqtt.connect(host, this.data.options);

      this.data.client.on('connect', function (connack) {

        wx.showToast({

          title: '连接成功'

        })

      })

      that.data.client.on("message", function (topic, payload) {

        console.log(" 收到 topic:" + topic + " , payload :" + payload)

        wx.showModal({

          content: " 收到topic:[" + topic + "], payload :[" + payload + "]",

          showCancel: false,

        });

      })

      //服务器连接异常的回调

      that.data.client.on("error", function (error) {

        console.log(" 服务器 error 的回调" + error)

      })

      //服务器重连连接异常的回调

      that.data.client.on("reconnect", function () {

        console.log(" 服务器 reconnect的回调")

      })

      //服务器连接异常的回调

      that.data.client.on("offline", function (errr) {

        console.log(" 服务器offline的回调")

      })

    },

回答关注问题邀请回答
收藏

3 个回答

  • 加菲猫的幸福生活
    加菲猫的幸福生活
    2022-10-26

    import mqtt from'../../utils/mqtt.js';

    const aliyunOpt = require('../../utils/aliyun/aliyun_connect.js');

    可以分享下这两个文件吗


    2022-10-26
    有用
    回复
  • Hcat
    Hcat
    2022-09-19

    微信机制问题,给你mqtt的连接关闭了,手机息屏或切后台都会出现,加入自动重连解决

    2022-09-19
    有用
    回复 1
    • MY
      MY
      2022-09-20
      大哥,能帮我看看我提的第一个问题吗?mqtt相关的
      2022-09-20
      1
      回复
  • a0依然、、欒銀龍
    a0依然、、欒銀龍
    2022-09-07

    啥手机?苹果手机切换到后台应用应该实际上是没启动的

    2022-09-07
    有用
    回复
登录 后发表内容