环境配置
通过NodeJS的官网下载NodeJS
链接为link
安装mqtt库
- 首先创建一个文件夹存放对应的库
- 在该文件夹当中上方的搜索框当中输入cmd打开命令行
- 执行
npm install mqtt --save
通过该条语句就会将mqtt库保存在该文件库当中。
创建文件
- 利用IDE打开该文件,并且新建JS文件。在创建文件时,必须与mqtt的moudel库在同一个目录下。
简单的publish与subscribe
publish的实现
- 调用模块以及设置地址
const mqtt = require('mqtt')
/***
* 浏览器环境
* 使用协议为 ws 和 wss 的 MQTT over WebSocket 连接
* EMQX 的 ws 连接默认端口为 8083,wss 为 8084
* 注意需要在连接地址后加上一个 path, 例如 /mqtt
*/
const url = 'ws://broker.emqx.io:8083/mqtt'
- 创建客户端实例
/ 创建客户端实例
const options = {
// Clean session
clean: false,
connectTimeout: 4000,
// 认证信息
clientId: 'emqx_test',
username: 'emqx_test',
password: 'emqx_test',
}
const client = mqtt.connect(url, options)
- 连接后,模拟发布温度信息
client.on('connect', function (connack) {
console.log('Connected')
sessionPresent = connack.sessionPresent
code = connack.returnCode
if(code == 0){
client.publish("home/2nfloor/201/temperature",JSON.stringify({current: 27}),
{qos: 1, retain: true},function (err){
if(err == undefined){
console.log("publish finished")
client.end()
}else {
console.log("publish failed")
}
})
}else {
console.log(`Connection failed: ${connack.returnCode}`)
}
})
在其中注意JSON当中如果要使用占位符,使用的是tab上方的
,而不是‘ ’。
subscribe的简单实现
- 与上文相同的创建客户端 值得注意的是当订阅端的clientId与发布端的一致时,无法接收到消息,因此需要设置不同的clientId。
const mqtt = require('mqtt')
/***
* 浏览器环境
* 使用协议为 ws 和 wss 的 MQTT over WebSocket 连接
* EMQX 的 ws 连接默认端口为 8083,wss 为 8084
* 注意需要在连接地址后加上一个 path, 例如 /mqtt
*/
const url = 'ws://broker.emqx.io:8083/mqtt
// 创建客户端实例
const options = {
// Clean session
clean: false,
connectTimeout: 4000,
// 认证信息
clientId: 'emqx03_test',
username: 'emqx_test',
password: 'emqx_test',
}
const client = mqtt.connect(url, options)
- 对boker订阅主题
client.on('connect', function (connack) {
console.log('Connected')
sessionPresent = connack.sessionPresent
code = connack.returnCode
if(code == 0){
if(sessionPresent == false){
console.log("subscribing")
client.subscribe("home/2nfloor/201/temperature",{qos: 1},
function (err,granted){
if(err != undefined){
console.log("subscribe failed")
}else {
console.log(`subscrible succeeded with ${granted[0].topic}, qos: ${granted[0].qos},${granted[0].current}`)
}
}
)
}
}else {
console.log('Connection failed: ${connack.returnCode}')
}
})
- 捕获messag动作,并且进行反馈
client.on("message",function ( _, message,packet){
var jsonPayload = JSON.parse(message.toString())
console.log(`current temperature is ${jsonPayload.current},retained: ${packet.retain}`)
})