实现MQTT协议的服务器端和客户端的双向交互

公司和第三方合作开发一个传感器项目,想要通过电脑或者手机去控制项目现场的传感器控制情况。现在的最大问题在于,现场的边缘终端设备接入的公网方式是无线接入,无法获取固定IP,所以常规的HTTP协议通信就没法做,现在打算使用MQTT来实现云平台和边缘终端(传感器)之间的双向通信。

网络结构

服务器实现

复制代码
const aedes = require('aedes')();
const aedesServer = require('net').createServer(aedes.handle);
const port = 1883;

aedesServer.listen(port, function () {
    console.log('服务启动并开始监听端口:', port)
})

//监听MQTT服务器端口,当有客户端连接上时,触发该回调
aedes.on("client", (client) => {
    console.log("客户端连接成功:", client.id);
})

//监听MQTT服务器端口,当有客户端主动断开连接或者服务器600s内没收到某个客户端的心跳包就会触发
aedes.on("clientDisconnect", (client) => {
    console.log("客户端断开连接:", client.id);
})

//监听客户端发布的主题
aedes.on("publish", function (packet, client) {
    //针对不同的客户端写不同的逻辑
    if (client) {
        //根据主题不同写不同的逻辑,建议采用JSON格式传输
        console.log("监听客户端发过来的消息",packet.topic, packet.payload.toString());
    }
})

//服务器发出的消息
setInterval(() => {
    aedes.publish({
        topic: "serverMsg",
        payload: "服务器发消息",
        qos: 1,
        retain: false,
        dup: false,
        cmd: "publish"
    }, (err) => {
        if (err) {
            console.log("发布失败");
        }
    });
}, 20000)

客户端实现

复制代码
var mqtt = require('mqtt');

var client = mqtt.connect('mqtt://192.168.70.220:1883',{
    clientId:'nodejs-mqtt-client'
})

client.on('connect',function (){
    console.log('连接上MQTT服务器')
    //需要订阅服务器主题,不然无法接受消息
    client.subscribe('serverMsg',{
        qos:1
    })
})
//发布客户端消息
setInterval(()=>{
    client.publish('topic1','hello mqtt client',{
        qos:1
    })
},20000)

client.on('message',function (topic,message){
    console.log('接受服务器消息:','主题:',topic,'消息:',message.toString())
})
相关推荐
xiaoye-duck22 分钟前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
Funlang2 小时前
龙芯上的 Fun:从跑起来到机器码
开发语言·龙芯
总要学点什么2 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
旖旎夜光2 小时前
【C++ 基础入门】C++11 新特性(中):右值引用、移动语义与完美转发
开发语言·c++·笔记·学习
ShineWinsu2 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页
普通人63 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
꧁细听勿语情꧂3 小时前
直接选择排序,堆排序,冒泡排序,递归快速排序、hoare版本、挖坑法、lomuto前后指针,非递归快速排序
c语言·开发语言·数据结构·算法
SomeOtherTime3 小时前
Rust集合(AI回答)
开发语言·后端·rust
曦樂~4 小时前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
郝学胜-神的一滴4 小时前
LangChain Skill 实现(渐进披露 On-Demand Skill,LangChain 官方 Deep Agent Skill 模式)
开发语言·python·langchain·numpy