一、微信小程序连接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’