NodeJs搭建MQTT服务器(入门)

环境配置

通过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}`)

})

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值