关于小程序使用mqtt记录

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

mqtt 可在后台实现传输,也可通过socket 实现小程序端和后台数据消息发布和订阅。

一、mqtt 使用

1、下载库

微信小程序使用mqtt是通过websocket来实现,需要用到mqtt.js这一个第三方库。

JS客户端库:https://github.com/mqttjs/MQTT.js#store
百度网盘下载:https://pan.baidu.com/s/14QDQigXATzaA-dPVfUdwDA
提取码: r3u2

2、创建mqtt连接

const Mqtt = 'wxs://wwww/mqtt';
const host =  'wxs://wwww/mqtt';
var mqttClient = {};
var client = null;
var status = false;

mqttClient.mqttObj = () =>{
  return client;
}
let clientIds = 'mqttjs_' + Math.random().toString(16).substr(2, 8);
mqttClient.initMqtt = (clientId)=>{
  
  if(client ==null){
    console.log("初始化连接mqtt...");
    options.clientId = clientId;
    clientIds = clientId;
    client = mqtt.connect(host, options);
    
  }else{
    console.log(client.connected)
    if(!client.connected){
      console.log("断开重连mqtt...");
      options.clientId = clientId;
      client = mqtt.connect(host, options);
    }
  }
}

3、断开连接

mqttClient.disconnect = ()=>{
  if(null !=client){
    console.log("断开连接mqtt...");
    client.end(true);
    client = null;
    status = false;
  }
}

4、订阅主题

mqttClient.initTopic = ()=>{
  wx.request({
    url: API.getTopic,
    header: {
          'content-type': 'application/json',
          'cookie': wx.getStorageSync("sessionid")
    },
    success :(res) =>{
        if(res.data.code == 0){
              let data = res.data.data;
              // console.log(data);
              for(let i=0;i<data.length;i++){
                mqttClient.subscribe(data[i]+"_device");
              }
            }
        },
        fail:(res)=>{
              wx.reLaunch({
                url: '/pages/login/login'
            })
        }
  });
}

mqttClient.subscribe = (title)=>{
  // console.log("订阅消息",title);
  client.subscribe(title, {
    qos:0
  });

}

5、接收消息

if(mqttClient.mqttObj() !=null){
     mqttClient.mqttObj().on('message', (topic, message, packet) => {
         // console.log('111',message.toString());
         let data = message.toString();
         let dataJson = JSON.parse(data);
         // console.log(dataJson); 
     });
}

二、nginx 转发websockt

1、配置

location /mqtt {
         proxy_pass http://localhost:61614;
		proxy_redirect off;
		proxy_set_header Host localhost:1883;
		
		proxy_set_header Sec-WebSocket-Protocol mqtt;
		#more_clear_headers Sec-WebSocket-Protocol;
		
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
}

2、注意事项

(1)小程序必须使域名和ssl
(2)小程序MQTT 连接后台使用websocket 协议,所有必须做转换
(3)mqtt 配置连接时间,不然很容易中断,不能很好的实时收到消息

 var defaultConnectOptions = {
      keepalive: 3,
      reschedulePings: true,
      protocolId: 'MQTT',
      protocolVersion: 4,
      reconnectPeriod: 1000,
      connectTimeout: 10 * 1000,
      clean: true,
      resubscribe: true
    }
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值