微信小程序连接MQTT服务器、阿里云微消息队列MQTT版

一、微信小程序连接EMQX Broker

1. 打开 https://unpkg.com/browse/[email protected]/dist/mqtt.min.js 复制保存为js文件

2. 放到小程序文件夹utils中

3. 在项目的详情-本地设置中勾选“不校验合法域名……”

4. 编辑index.js:

const mqtt = require('../../utils/mqtt.min.js')

function connectMqtt() {
  const options = {
    connectTimeout: 30000,
    keepalive: 120,
    clientId: '12345678',
    username: 'xxx',
    password: 'xxx',
  }
  const client = mqtt.connect('wx://x.x.x.x:8083/mqtt', options)
 
  client.on('reconnect', (error) => {
    console.log('mqtt on reconnect:', error)
  })

  client.on('disconnect', (e) => {
    console.log('mqtt on disconnect')
  })
 
  client.on('error', (error) => {
    console.log('mqtt on error:', error)
  })

  client.on('connect', (e) => {
    console.log('mqtt on connect')
    client.subscribe('test', { qos: 0 }, function (err) {
        if (!err) {
          console.log("mqtt sub success")
        }
    })
  })

  client.on('message', function (topic, message, packet) {
    var payload = packet.payload.toString()
    console.log("mqtt on message:", payload)
    if (payload == 'server_cmd_send_test') {
      client.publish('test2', "send_test from minip");
    }
  })

  /* // payload为json格式
  client.on('message', function (topic, message, packet) {    
    console.log("mqtt on message: packet= " +  JSON.stringify(packet))
    // {"data":"yddasfdasf"}
    var payload = packet.payload // 必须这样过度一下
    var jsonPayload = JSON.parse(payload) // 再传入
    console.log("mqtt on message: jsonPayload= " +  JSON.stringify(jsonPayload))
    that.setData({
      motto: 'message:' + jsonPayload.data
    })
    if (payload == 'server_cmd_send_test') {
      client.publish('test2', "send_test from minip")
    }
  })
  */
}  

调用connectMqtt()

  onLoad: function () {

    connectMqtt()

    ......

5. 简单说明

5.1 连接成功后,订阅 test这个topic,用其他模拟终端发送test这个topic,内容为"server_cmd_send_test",通过log发现小程序已经收到,收到后判断是服务器发送的内容,则向test2这个topic发送一个消息,其他模拟终端订阅test2这个topic,可以看到收到了小程序的消息。

5.2 MQTT服务器是使用EMQX搭建的,这里要注意连接的地址 wx://x.x.x.x:8083/mqtt 中x.x.x.x为IP地址,另外一个就是要勾选“不校验合法域名……”这个。

 

二、微信小程序连接阿里云微消息队列MQTT版,只需要修改连接的参数即可:

1. client id (GID_XXX@@@YYY)

2. 用户名 (Signature|xxx|xxx)

3. 密码(根据阿里云规则计算,使用 hex_hmac_sha1.js 计算)

4. const client = mqtt.connect('wx://xxx.mqtt.aliyuncs.com', options)

5. 关于topic,主topic例如‘test’,子topic可以是‘test/test2’

 

 

你可能感兴趣的:(MQTT)