0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Node搭建本地MQTT服务器

信盈达 2022-05-26 14:11 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

2d616c00-da9b-11ec-b80f-dac502259ad0.png

大家好,我是牛牛。今天给分享一下使用Node搭建MQTT服务端的流程,主要包含以下几部分内容:

MQTT介绍

MQTT基本原理及相关概念

Node搭建MQTT


一、MQTT介绍


MQTT 是一种基于发布/订阅模式的轻量级物联网消息传输协议 ,可以用极少的代码和带宽为联网设备提供实时可靠的消息服务,它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。


MQTT主要有以下几个特点(来自百度和MQTT中文网):

使用发布/订阅消息模式,一对多的消息发布

开发消息协议,易于实现

1字节固定头,2字节报文,开销小

基于TCP/IP协议族,提供有序,无损,双向链接

与HTTP之类的协议相比,MQTT在通过网络传输数据时表现出众。另一个重要特点是易于在客户端实现。

二、MQTT基本原理与相关概念

1.1 MQTT基本原理

在MQTT协议通讯中,有两个最为重要的角色。它们分别是服务端和客户端。

1、 MQTT服务端

MQTT服务端通常是一台服务器。它是MQTT信息传输的枢纽,负责将MQTT客户端发送来的信息传递给MQTT客户端。MQTT服务端还负责管理MQTT客户端。确保客户端之间的通讯顺畅,保证MQTT消息得以正确接受和正确投递。

2、 MQTT客户端

MQTT客户端可以向服务端发布信息,也可以从服务端收取信息。把客户端发送信息的行为称为“发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅信息”。


1.2MQTT主题

MQTT服务端在管理MQTT信息通讯时,就是使用“主题”来控制的。

1.3MQTT发布与订阅特性

MQTT通讯的核心枢纽是MQTT服务端。有了服务端对MQTT信息的接、储存、处理和发送,客户端在发送和订阅消息时,可以相互独立,且在空间上可以分离,时间上可以异步。


三、Node搭建MQTT服务器

node安装:

https://www.runoob.com/nodejs/nodejs-install-setup.html

3.1 安装模块

安装所需要的MQTT模块

可以使用mosca也可以使用依赖较小的adedes

https://www.npmjs.com/package/aedes

npm install aedes --save

如果下载慢指定镜像源后再次执行安装:

npm config set registry https://registry.npm.taobao.org

3.2开启服务端

服务器node端,新建index.js

// 引入模块var aedes = require('aedes')();
//创建服务var server = require('net').createServer(aedes.handle);
// 监听客户端连接aedes.on('client',(client)=>{ console.log("客户端连接,clientId:"+client.id)})
// 监听客户端断开aedes.on('clientDisconnect',(client)=>{ console.log("客户端断开连接,clientId:"+client.id)})
//监听端口server.listen(1883,()=>{ console.log('[ Server ] server listening on port:1883');})

默认服务器ip地址为127.0.0.1,也可以自己指定。


运行服务端:

node index.js

使用MQTT.fx工具进行测试服务端连接:

2d9b32d2-da9b-11ec-b80f-dac502259ad0.png

点击 Connect可以看到右侧图标变绿,则代表连接成功。

2de20590-da9b-11ec-b80f-dac502259ad0.png

同时服务端会显示,连接的客户端的id

2e5677d6-da9b-11ec-b80f-dac502259ad0.png

点击 Disconnect可以看到右侧图标变灰,则代表断开成功。

2e9269ee-da9b-11ec-b80f-dac502259ad0.png

同时在服务端可以看到断开连接的客户端id

2ecc96b4-da9b-11ec-b80f-dac502259ad0.png

到目前为止,还没有添加身份认证,也就代码只要用户知道服务端的ip和端口号都可以连接进来,如果需要考虑安全性,则可以添加身份验证。

3.3 添加身份验证

使用aedes.authenticate添加身份验证

2efdd6d4-da9b-11ec-b80f-dac502259ad0.png


// 身份验证aedes.authenticate = function (client, username, password, callback) { callback(null, username === "xydadmin" && password.toString()==="123456")}

添加验证后尝试连接,报错:

2f5385c0-da9b-11ec-b80f-dac502259ad0.png

在配置中添加用户名和密码,尝试重连

2f89ced2-da9b-11ec-b80f-dac502259ad0.png


2ff496cc-da9b-11ec-b80f-dac502259ad0.png

3.4消息订阅与消息发布

添加消息订阅

// 设置订阅aedes.on('subscribe', function (subscriptions, client) {
if (client) { // subscriptions 订阅主题列表,一般一次订阅一个 console.log('[ Subscribe ] SubscripTions:'+subscriptions[0].topic,' Qos:'+subscriptions[0].qos,' CilentID:'+client.id); }});

添加消息发布

// 设置发布aedes.on('publish',function(packet,client) { if (client) { // packet为发布的信息 console.log('[ Publish ] CilentID:'+client.id,' Qos:'+packet.qos,' Data:[ '+String(packet.payload),' ]'); }});

取消订阅

//取消订阅aedes.on('unsubscribe',function(unsubscriptions,client){ if(client){ console.log('[ unSubscribe ] unSubscripTions:'+unsubscriptions[0],' CilentID:'+client.id); }});

消息的发布与订阅测试,目前是发布和订阅使用相同的topic,在发布topic处设置发送内容,客户端订阅了topic则可以接收到该发布topic的信息。

3.5MQTT.fx测试消息的发布和订阅

订阅topic:/login

302e45fc-da9b-11ec-b80f-dac502259ad0.png

发布topic:/login

3061bebe-da9b-11ec-b80f-dac502259ad0.png

查看订阅topic处,即可看到发送的内容。

30872d70-da9b-11ec-b80f-dac502259ad0.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    13

    文章

    10095

    浏览量

    90899
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用paho-mqtt里例程连接服务器失败怎么解决?

    【rt-thread】【paho-mqtt】最近由于学习需要,了解了关于rt-thread软件包paho-mqtt的使用,但是使用官方例程时,出现连接不上服务器的情况。具体报错如下: msh
    发表于 09-18 06:38

    完整指南:如何搭建树莓派MQTT代理服务器

    MQTT通过TCP/IP运行,使用代理服务器管理客户端之间的消息分发,允许设备订阅特定主题,并且仅在发布相关数据时接收更新。其关键特性包括:低带宽占用:非常适合
    的头像 发表于 08-04 17:03 639次阅读
    完整指南:如何<b class='flag-5'>搭建</b>树莓派<b class='flag-5'>MQTT</b>代理<b class='flag-5'>服务器</b>?

    恒讯科技分析:云储存服务器搭建教程

    搭建云存储服务器是一个相对复杂但极具实用性的项目,以下是一个简化的搭建教程,帮助你快速入门。 一、明确需求 在搭建云存储服务器之前,首先需要
    的头像 发表于 07-07 11:07 1067次阅读

    HarmonyOS5云服务技术分享--ArkTS开发Node环境

    气的方式探索这个功能,结尾还有实用总结和鼓励彩蛋哦~✨ ? 一、HarmonyOS云函数开发:核心能力与价值 HarmonyOS的云函数(Serverless)为开发者提供了​​无服务器架构​​的便捷
    发表于 05-22 17:21

    存储服务器怎么搭建?RAKsmart实战指南

    搭建存储服务器需兼顾硬件性能、数据冗余与安全访问。以RAKsmart服务器为例,整体流程可分为五步:需求评估→硬件选型→RAID配置→系统部署→网络设置。以下是小编对RAKsmart存储服务器
    的头像 发表于 04-01 10:09 974次阅读

    依托raksmart服务器在多种系统上本地部署deepseek注意事项

    在RAKsmart服务器本地部署DeepSeek时,需根据不同的操作系统和环境做好全面适配。以下是关键注意事项及分步指南,主机推荐小编为您整理发布依托raksmart服务器在多种系统上本地
    的头像 发表于 03-19 11:25 730次阅读

    服务器怎么搭建

    服务器搭建是一个涉及多个方面的复杂过程,从硬件选择到软件配置,再到安全防护和日常维护,每一步都需细心规划与实施。下面,小库为您简要介绍服务器搭建的基本步骤。
    的头像 发表于 03-04 13:04 1212次阅读

    跨地域企业组网搭建服务器的步骤和建议

    跨地域企业组网搭建服务器需要综合考虑网络架构、安全性、成本和性能等因素。以下是详细的搭建步骤和建议: 1、明确需求和规划 确定服务器用途:明确服务器
    的头像 发表于 02-19 10:58 748次阅读

    windows搭建ftp服务器的步骤

    在Windows系统上搭建FTP(文件传输协议)服务器通常涉及一系列步骤,包括安装必要的服务、配置服务器设置、以及确保网络安全设置允许FTP流量。 一、准备工作 确定操作系统版本 :
    的头像 发表于 02-01 15:49 2189次阅读

    ftp服务器怎么搭建

    搭建FTP(文件传输协议)服务器是一个涉及多个步骤的过程,这些步骤包括选择合适的FTP服务器软件、安装软件、配置服务器以及测试连接等。 一、选择合适的FTP
    的头像 发表于 02-01 15:43 1414次阅读

    华为 Flexus 云服务器搭建萤火商城 2.0

    在今天这个意义非凡的日子,我怀揣着满心的期待与憧憬,毅然踏上了利用华为 Flexus 云服务器搭建轻量级、高性能、前后端分离的电商系统萤火商城 2.0 的征程。这一旅程,注定充满了挑战与惊喜,犹如
    的头像 发表于 01-13 13:36 880次阅读
    华为 Flexus 云<b class='flag-5'>服务器</b><b class='flag-5'>搭建</b>萤火商城 2.0

    采用华为云 Flexus 云服务器 X 实例部署 MQTT 服务器完成设备上云

    一、前言 1.1 开发需求 这篇文章讲解: 采用华为云最新推出的 Flexus 云服务器 X 实例 EMQX 服务器搭建 MQTT 服务器
    的头像 发表于 12-26 18:12 1011次阅读
    采用华为云 Flexus 云<b class='flag-5'>服务器</b> X 实例部署 <b class='flag-5'>MQTT</b> <b class='flag-5'>服务器</b>完成设备上云

    采用 Flexus 云服务器 X 实例搭建 RTSP 直播服务器

    一、前言 这篇文章讲解:  采用华为云最新推出的 Flexus 云服务器 X 实例搭建 RTSP 服务器,完成视频直播需求。 随着实时视频流传输需求的增长,RTSP(实时流协议)服务器
    的头像 发表于 12-24 17:36 1015次阅读
    采用 Flexus 云<b class='flag-5'>服务器</b> X 实例<b class='flag-5'>搭建</b> RTSP 直播<b class='flag-5'>服务器</b>

    如何使用HTTP服务器搭建本地Web网站

    最近在学习 ETH 模块,ETH 模块具有 HTTP 服务的功能,我将在本帖中探讨如何使用 HTTP 服务搭建一个本地 Web网站,并分享一些我所获得的经验。
    的头像 发表于 12-24 09:54 3399次阅读
    如何使用HTTP<b class='flag-5'>服务器</b><b class='flag-5'>搭建</b><b class='flag-5'>本地</b>Web网站

    超级干货!本地搭建代码托管平台Gitea

    ,运行时对CPU和内存的需求较小,适用于个人或小型团队协作开发,适合在个人电脑或资源受限的服务器上使用。2Gitea的本地搭建本次搭建环境演示系统为Ubuntu18
    的头像 发表于 12-19 19:33 1295次阅读
    超级干货!<b class='flag-5'>本地</b><b class='flag-5'>搭建</b>代码托管平台Gitea