Redian新闻
>
nodejs 实现MQTT协议的服务器端和客户端的双向交互

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

公众号新闻

一、项目背景

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

二、术语定义

2.1云平台

  主要是针对数据、设备等的管理。部署在云端的软件应用系统,通过与边缘终端,实现数据获取或者指令下发。

2.2边缘终端

  位于网络边缘的计算机设备,通过网络与云平台连接,向下连接解析仪和各类传感器。

2.3解析仪

  数据接受装置,通过有线/无线模式,连接边缘终端或通过有线模式接收不同来源的传感器数据。

2.4传感器

  通过有线/无线模式,连接边缘终端,传输相应的参数或通过有线模式连接解析仪,传输相应的参数。

三、网络结构

 四、代码实现

4.1 服务器实现

首先安装nodejs和aedes,具体的操作和截图网上有很多现成的。

新建一个“server.js”

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)

4.2客户端实现

新建一个“client.js”

客户端只需要使用“mqtt.connect”方法,就可以跟服务端建立长连接。

就目前实际使用的情况看,客户端偶尔会自动与服务器断开,并且自动连上,稳定性方面有待验证。

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


4.3 效果呈现

通过两个定时器,实现了双向通信。

服务端

 客户端


链接:https://www.cnblogs.com/qllc220/p/17839083.html

(版权归原作者所有,侵删)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
幼儿通识1001夜 | 不可思议的人体世界:为什么有的双胞胎长得不一样?谁说少年班大学生不能成才?主观报告和客观分析太阳的畅想2023医疗服务年度创新白皮书:投资放缓,融合、连续、可及的服务创新加快Qt 6.6正式发布,引入新模块Qt Graphs继报刊、频道后,新闻客户端或将迎来“关停合并潮”SpringBoot 采用 JsonSerializer 和 Aop 实现可控制的数据脱敏《骄阳伴我》 你来人间一趟。应该看看太阳。生活流电视剧,最狗血的部分就是爸妈吵架。饶毅/骆利群:谁说少年班大学生不能成才?主观报告和客观分析SPA 和 React:你并不总是需要服务器端渲染中年古偶剧,资方和演员的双向奔赴2023再次回国 (出埃及记)[9月26日]科学历史上的今天——金·赫尔尼(Jean Amédée Hoerni)李飞飞朱松纯把《我的世界》变AI的世界,微软Xbox组参与,游戏Agent协作框架来了品牌与代言人的双向奔赴,思加图和杨幂是怎么带“节奏”?Node.js 21发布,升级V8引擎,带来稳定的WebSteams模块和Test Runner亚马逊推出 WorkSpaces 瘦客户端迷你 PC:机顶盒大小、2+16G 售 195 美元中華民國在台灣(二)台灣之路服务端来自火星,客户端来自金星,RSC 开发新思路Qt 6.5 LTS转为 “仅面向商业客户提供” 阶段年度满分公关营销!洁柔和用户的双向奔赴太好嗑快消外企社招 | Lagardère拉格代尔,世界三大旅行零售商之一,百年外企,平均月薪17.2k,0经验可投,留学生有优势2023 国产服务器操作系统发展报告发布:服务器操作系统进入 2.0 时代,面向云计算、智能计算进化2023快手年度盛典,见证主播与老铁的双向奔赴FastDFS+Nginx本地搭建文件服务器同时实现在外远程访问「端口映射」国美客户端弹窗称黄光裕兄妹拖欠工资;瑞幸客服回应将与迪奥联名;马斯克旗下星链公司推出直连手机业务丨邦早报平替XShell,分享一款功能强大、跨平台、免费的 SSH 客户端:PortX“根本不需要TypeScript,JS+JSDoc够了”,大佬说我想多了一次唯爱与生命不可辜负的双向奔赴​——沃尔沃汽车携手《主角·大医》致敬仁心,守护热爱韩国刺刀见红的生死之战很快要出结果了威马关闭后台服务器,客服失联,车机服务全没了;新浪上海被网信办约谈;华为派出工程师检查,赛力斯工厂急招大量员工丨雷峰早报不只是降息!华尔街热议的是:美联储结束QT!重启QE?是时候基于云重新设计 Kafka 了!AutoMQ 如何实现 Kafka 十倍的降本增效FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」前端技术探秘 - Nodejs的CommonJS规范实现原理
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。