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

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

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

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