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

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

    关注

    12

    文章

    8352

    浏览量

    83546
收藏 人收藏

    评论

    相关推荐

    NB81如何通过MQTT对接EMQX服务器

    NB81如何通过MQTT对接EMQX服务器,有对接流程的参考文档么
    发表于 06-04 06:02

    分享 | PTP、NTP时间同步服务器的部署与搭建过程

    分享 | PTP、NTP时间同步服务器的部署与搭建过程
    的头像 发表于 05-15 10:01 390次阅读
    分享 | PTP、NTP时间同步<b class='flag-5'>服务器</b>的部署与<b class='flag-5'>搭建</b>过程

     海外云服务器搭建pi节点详细步骤

     海外云服务器搭建pi节点简单吗?海外云服务器搭建pi节点步骤有哪些?小编为您整理发布海外云服务器搭建
    的头像 发表于 02-21 10:16 518次阅读

    什么是本地IP?服务器本地IP有哪些优势?

    本地IP是指直接在互联网上分配给服务器或设备的IP地址,而不是通过NAT(网络地址转换)或 代理等中间设备进行转发。让我们关注本地IP的优势。 1.直接访问:原始IP允许无中间设备转发或代理直接
    的头像 发表于 12-26 11:52 3282次阅读

    【飞腾派4G版免费试用】如何在飞腾开发板上安装EMQX MQTT服务器

    系统中搭建一个单节点的MQTT服务器。 1. 安装EMQX 本文演示的环境为: 硬件:飞腾派开发板,ARMV8架构 操作系统:Ubuntu 20.04 EMQX 安装与运行 下载安装包 访问 EMQX
    发表于 12-26 11:16

    如何自己搭建一个服务器

    如何自己搭建一个服务器?自己搭建一个服务器涉及到硬件和软件两个方面。下面是一个简单的指南,涵盖了基本的步骤。请注意,这是一个概述,实际步骤可能因你的需求和硬件选择而有所不同。
    的头像 发表于 12-12 16:52 3155次阅读

    搭建ftp服务器的步骤

    搭建ftp服务器的步骤  搭建FTP服务器是一项需要一定技术知识的任务,但是只要按照以下步骤进行操作,您就能成功搭建自己的FTP
    的头像 发表于 12-07 16:32 890次阅读

    存储服务器怎么搭建

      搭建存储服务器需要根据我们的需求和环境选择合适的硬件和软件,并进行相应的配置。那么存储服务器怎么搭建?
    的头像 发表于 10-31 16:51 2125次阅读

    基于EMQX平台自建MQTT服务器并实现通讯

    MQTT消息服务器,提供了稳定可靠的消息传输服务。本次教程中,我们将探讨如何基于EMQX平台自建MQTT服务器,并实现设备之间的高效通讯。
    的头像 发表于 10-27 08:21 841次阅读
    基于EMQX平台自建<b class='flag-5'>MQTT</b><b class='flag-5'>服务器</b>并实现通讯

    串口服务器如何使用OneNET平台MQTT服务器通讯教程 #MQTT #串口服务器 #OneNET平台

    串口服务器
    亿佰特物联网应用专家
    发布于 :2023年10月26日 15:47:36

    轻量服务器怎么搭建ssh?

    搭建轻量服务器时,我们通常需要设置SSH登录,以便能够通过SSH客户端远程连接到服务器。下面是一些简单的步骤来帮助您搭建SSH。 第一步:登录轻量应用
    的头像 发表于 10-10 09:59 450次阅读

    windows下安信可Ra-08H接入自建chirpstack服务器,使用MQTT通信教程

    5.2设置订阅发布的Topic 5.3节点上报数据 5.4服务器下发数据 5.5确认服务器内的log日志 六、结束 前言 安信可开源团队相应网友号召,今天给大家带来了本地搭建chir
    的头像 发表于 08-28 17:31 547次阅读
    windows下安信可Ra-08H接入自建chirpstack<b class='flag-5'>服务器</b>,使用<b class='flag-5'>MQTT</b>通信教程

    windows系统下搭建chirpstack服务器教程

    安信可开源团队相应网友号召,今天给大家带来了本地搭建chirpstack服务器并且成功连接的教程,给大家少走一些弯路,本章内容篇幅较长,有想要了解和测试的朋友耐心看完,本例程从模组获取,烧录,
    的头像 发表于 08-28 11:33 686次阅读
    windows系统下<b class='flag-5'>搭建</b>chirpstack<b class='flag-5'>服务器</b>教程

    搭建LoRaWAN服务器——ChirpStack

    LoRaWAN技术的应用范围越来越广泛,而ChirpStack作为⼀款备受开发者青睐的优秀LoRaWAN服务器,支持多种操作系统和硬件平台,可在不同场景下快速部署和使用。在本次实例中,我们将使
    的头像 发表于 07-31 23:07 709次阅读
    <b class='flag-5'>搭建</b>LoRaWAN<b class='flag-5'>服务器</b>——ChirpStack

    Linux开发_CentOS7.4服务器搭建NFS、NGINX服务器,安装ffmpeg、Qt环境

    在CentOS7.4服务器版本的环境下搭建NFS服务器、安装ffmpeg、安装nginx服务器、部署Qt编译环境。
    的头像 发表于 07-14 13:45 1255次阅读
    Linux开发_CentOS7.4<b class='flag-5'>服务器</b><b class='flag-5'>搭建</b>NFS、NGINX<b class='flag-5'>服务器</b>,安装ffmpeg、Qt环境