收藏
回答

请问哪位大佬讲解一下mqtt怎么判断用户是在线还是离线状态啊?

我有多个4G设备,有时候无缘无故掉线了都不知道,我就是想用mqtt怎么判断离线还是在线状态

下面是我这写的判断,可是一直有个问题就是我离线的设备写入的值还是离线,可是我在线的设备总是在“在线”和“离线”中不停的切换赋值

client.on('message'(topic, payload) => {    //topic:消息标题 payload:消息内容
      let sKey = topic.split('/')[2]
      let bxData = thas.data.bxData
      // console.log("设备",sKey)
      for(var i=0;i<bxData.length;i++){
        if (bxData[i].IMEI == sKey){
          thas.setData({
            ['bxData[' + i + '].zhuangtai']:"在线",
            ['bxData[' + i + '].mqttData']:JSON.parse(payload)
          })
        }else{
          thas.setData({
            ['bxData[' + i + '].zhuangtai']:"离线",
          })
        }
      }
    })
回答关注问题邀请回答
收藏

1 个回答

  • 风清雾云开见日出
    风清雾云开见日出
    2022-04-29

    第一:用遗嘱功能,可以判断是否离线,【备注:中转站不能停,停止可能会漏掉部分设备的遗嘱】。

    第二:用设备心跳包,你设置一个时间判断多长没有心跳包就离线

    2022-04-29
    有用
    回复 5
    • 大强
      大强
      发表于移动端
      2022-04-30
      谢谢,那请问我银尔达4G模块一直有发穿透性的心跳包,可客户端这怎样获取心跳包消息呢
      2022-04-30
      回复
    • 风清雾云开见日出
      风清雾云开见日出
      2022-04-30回复大强
      你用的mqtt,是你的4G模块发送消息到mqtt中转站,你的客户端和后台都可以接收到你的中转站消息,看你自己是准备怎么区分消息了
      2022-04-30
      回复
    • 风清雾云开见日出
      风清雾云开见日出
      2022-04-30回复大强
      心跳包和你的操作消息数据包一样的接受和反馈的
      2022-04-30
      回复
    • 大强
      大强
      发表于移动端
      2022-04-30回复风清雾云开见日出
      上面其实我实现了有消息就改变一直状态,可是不知道为什么我用了循环遍历了我注册了的设备,通过条件判断收到的ID是不是循环里的设备,这样就能得出发来的消息是哪个的,没收到的自然可以判定是离线设备,问题就是那条件判断离线的一直是离线,可是在线的一直反复在两种状态切换赋值
      2022-04-30
      回复
    • 风清雾云开见日出
      风清雾云开见日出
      2022-05-04回复大强
      你可以在你的每个设备参数中增加一个时间参数,收到的消息获取设备标识,修改设备对应的时间参数,超过一定时间就判断离线就可以了
      2022-05-04
      回复
登录 后发表内容