0
点赞
收藏
分享

微信扫一扫

搭建基于 nodejs 的 MQTT 服务器

青乌 2022-01-20 阅读 51

创建服务端

1.先从初始化一个 package.json 开始。

npm init

2.安装 mqtt 服务器必要依赖项 mosca mqtt

npm install mosca mqtt

3.根目录下创建 mqtt.js 文件,写入以下内容,创建 mqtt 简易服务器。

// MQTT服务端 

const mosca = require("mosca")

const MqttServer = new mosca.Server({
    port: 1883
})
MqttServer.on("clientConnected", function(client){
    // 当有客户端连接时的回调
    console.log("client connected", client.id)
})

/**
 * 监听MQTT主题消息
 * 当客户端有连接发布主题消息时
 */
MqttServer.on("published", function(packet, client){
    var topic = packet.topic
    switch(topic){
        case "temperature":
            console.log("message-publish", packet.payload.toString())
            // MQTT可转发主题消息到其他主题
            MqttServer.publish({
                topic: 'other',
                payload: 'sssss'
            })
            break
        case "other":
            console.log("message-123", packet.payload.toString())
            break
    }
})

MqttServer.on("ready", function(){
    // 当服务开启时的回调
    console.log("mqtt is running...")
})

创建客户端推送

根目录下创建 publish.js 推送文件,写入以下内容:

// MQTT 客户推送端

const mqtt = require("mqtt")
const client = mqtt.connect("mqtt://127.0.0.1:1883") // 连接到mqtt服务器
// 写个定时器每隔3秒定时推送天气信息,此业务可替代为自己的实际需求
setInterval(function(){
    const value = Math.ceil(Math.random() * 40)
    client.publish("temperature", value.toString(), {qos: 0, retain: true})
    console.log("value:", value)
}, 3000)

创建客户端接收

根目录下创建 subscribe.js 接收文件,写入以下内容:

// 客户接收端

const mqtt = require("mqtt")
const client = mqtt.connect("mqtt://127.0.0.1:1883") // 指定服务端地址和端口

client.on("connect", function(){
    console.log("服务器连接成功")
    client.subscribe("temperature", {qos: 1}) // 订阅主题为test的消息
})

client.on("message", function(top, message){
    console.log("当前topic:", top)
    console.log("当前温度:", message.toString())
})

测试功能

1.启动mqtt服务

node mqtt / node mqtt.js

在这里插入图片描述

2.启动publish推送服务

node publish / node publish.js

在这里插入图片描述

3.启动subscribe客户接收服务

node subscribe /node subscribe.js

在这里插入图片描述
至此,一个基于 nodejs 的简易 mqtt 服务器就搭建完成了。

举报

相关推荐

0 条评论