Skip to main content

订阅主题

订阅主题

订阅主题方法的签名是:client.subscribe(topic, [options], [callback])

其中topic参数可以是string,string数组(表示多个topic),还可以是个object对象。

string形式比如:'test/topic'、string数组形式比如 ['test/topic1', 'test/topic2']、对象形式的比如 {'test1': {qos: 0}, 'test2': {qos: 1}} 键名为topic,键值为一个包含qos的对象。

options是{},可选参数:

  • qos 即Quality of Service,如果你的消息接收者一两次接收不到没关系,就用qos 0,也是默认值,如果希望至少接收到一次,那么用qos 1,如果希望只接收到一次,不会重复接收到,就用qos 2

callback 回调函数会在收到suback之后调用,callback的第一个参数是err表示suback是否包含错误,比如此设备没权限订阅这个主题的情况下。第二个参数是granted,是一个{topic, qos}对象数组,topic是订阅成功的topic名称,qos是订阅成功的qos,因为有的服务端很可能不支持qos 1、2,所以这里的qos可能和订阅( subscribe)时候的qos不一致。

完整示例代码:

app.js
import {connect} from './utils/mqtt.min'

App({
onLaunch() {
let client = connect({
protocol: 'wxs',
host: 'mqttx.cn',
port: 8883,
path: '/mqtt',
clientId: 'test',
clean: false
})
client.on('connect', function (connack) {
console.log('connected', connack.sessionPresent)
client.subscribe('test/topic')
client.subscribe('test/topic', {qos: 1}, function (err, granted) {
if (!err) {
console.log('first', granted)
}
})
client.subscribe('test/topic', {qos: 1}, function (err, granted) {
if (!err) {
console.log('second', granted)
}
})
client.subscribe(['test1', 'test2'])
client.subscribe({test1: {qos: 1}, test2: {qos: 1}})
})
}
})

消息订阅成功后,就会接收到服务端发送来的消息了。