Skip to main content

接收消息

接收消息

接收消息(即收到publish消息)的方法是在client对象上注册message事件:

方法签名为:client.on('message', callback)

callback回调函数的参数有3个:

  • topic publish消息的topic名称,string类型
  • message publish消息的payload,Buffer类型
  • packet 一个mqtt packet封装的对象

示例代码:

app.js
import {connect, Buffer} 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.on('message', function (topic, payload, packet) {
console.log(payload instanceof Buffer)
console.log(payload[0])
})
}
})

payload是个Buffer类型,怎么得到字符串呢?

可以用:payload.toString()得到字符串 或者 payload.toString('utf8')

如果发送的是二进制数据,可以直接从payload读取,因为Buffer实例就是Uint8Array类型,所以可以通过下标的方式访问:payload[0] 获得第一个字节的内容。比如我发送的是字母a,payload[0]就是十进制的97。

另外on('message', callback)最好不要写在connect回调里,因为connect这个回调短线重连成功后也会回调,这会造成注册了很多事件处理函数,callback会执行好几次。自己处理这种情况当然也可以解决。