实现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())
})

MQTT是一种轻量级的消息传输协议,常用于物联网设备之间的通信。MQTT服务器端实现可以使用多种语言和框架,这里以使用Node.js和Mosca框架为例进行介绍。 Mosca是基于Node.js的MQTT服务器框架,支持多种协议版本和QoS等级。以下是Mosca的服务器端实现步骤: 1. 安装Mosca框架和相关依赖 ``` npm install mosca bunyan --save ``` 2. 创建一个MQTT服务器实例 ```javascript var mosca = require('mosca'); var settings = { port: 1883 // MQTT服务器监听的端口号 }; var server = new mosca.Server(settings); ``` 3. 监听MQTT客户端连接事件 ```javascript server.on('clientConnected', function(client) { console.log('Client connected: ', client.id); }); ``` 4. 监听MQTT客户端发布消息事件 ```javascript server.on('published', function(packet, client) { console.log('Published:', packet.payload.toString()); }); ``` 5. 监听MQTT客户端订阅事件 ```javascript server.on('subscribed', function(topic, client) { console.log('Client subscribed to:', topic); }); ``` 6. 监听MQTT客户端取消订阅事件 ```javascript server.on('unsubscribed', function(topic, client) { console.log('Client unsubscribed from:', topic); }); ``` 7. 监听MQTT客户端断开连接事件 ```javascript server.on('clientDisconnected', function(client) { console.log('Client disconnected:', client.id); }); ``` 以上是Mosca框架的基本使用方法,可以根据需要自定义添加其他事件监听器。 除了Mosca框架外,还有其他MQTT服务器的实现方式,例如使用Java语言编写的Eclipse Mosquitto和使用Go语言编写的Eclipse Paho等。不同的实现方式可能有所不同,但基本原理都是类似的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值