MQTT服务之七:Socket实践及小程序连接mqtt.js
websocket客户端连接需要用到一个js库:mqtt.js
GitHub地址:https://github.com/mqttjs/MQTT.js
下面填写配置连接MQTT的信息
//MQTT连接的配置
options: {
protocolVersion:4, //MQTT连接协议版本
clientId: 'miniTest',
clean: false,
password: '123456',
username: 'socketer',
reconnectPeriod: 10000, //10000毫秒,两次重新连接之间的间隔
connectTimeout: 30 * 1000, //1000毫秒,两次重新连接之间的间隔
resubscribe: false //如果连接断开并重新连接,则会再次自动订阅已订阅的主题(默认true)
}
连接MQTT实例
onClick_connect: function() {
var that = this;
//开始连接
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的回调")
})
},
订阅主题(单个)
onClick_SubOne: function() {
if (this.data.client && this.data.client.connected) {
//仅订阅单个主题
this.data.client.subscribe('Topic0', function(err, granted) {
if (!err) {
wx.showToast({
title: '订阅主题成功'
})
} else {
wx.showToast({
title: '订阅主题失败',
icon: 'fail',
duration: 2000
})
}
})
} else {
wx.showToast({
title: '请先连接服务器',
icon: 'none',
duration: 2000
})
}
},
订阅主题(多个)
onClick_SubMany: function() {
if (this.data.client && this.data.client.connected) {
//仅订阅多个主题
this.data.client.subscribe({
'Topic1': {
qos: 0
},
'Topic2': {
qos: 1
}
}, function(err, granted) {
if (!err) {
wx.showToast({
title: '订阅多主题成功'
})
} else {
wx.showToast({
title: '订阅多主题失败',
icon: 'fail',
duration: 2000
})
}
})
} else {
wx.showToast({
title: '请先连接服务器',
icon: 'none',
duration: 2000
})
}
},
发布消息
onClick_PubMsg: function() {
if (this.data.client && this.data.client.connected) {
this.data.client.publish('Topic0', 'i am a boy');
wx.showToast({
title: '发布成功'
})
} else {
wx.showToast({
title: '请先连接服务器',
icon: 'none',
duration: 2000
})
}
},
取消订阅(单个)
onClick_unSubOne: function() {
if (this.data.client && this.data.client.connected) {
this.data.client.unsubscribe('Topic1');
} else {
wx.showToast({
title: '请先连接服务器',
icon: 'none',
duration: 2000
})
}
},
取消订阅(多个)
onClick_unSubMany: function() {
if (this.data.client && this.data.client.connected) {
this.data.client.unsubscribe(['Topic1', 'Topic2']);
} else {
wx.showToast({
title: '请先连接服务器',
icon: 'none',
duration: 2000
})
}
},