从0开始搭建简单的MQTT物联网平台笔记(一):MQTT broker

MQTT协议的简单介绍

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上。 其最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

发布和订阅

MQTT使用的发布/订阅消息模式,它提供了一对多的消息分发机制,从而实现与应用程序的解耦。

这是一种消息传递模式,消息不是直接从发送器发送到接收器 (即点对点),而是由MQTT Broker分发的。可以这么理解,目前有个公告栏,这个公告栏就是MQTT broker, 发布消息就是在公告栏上贴公告。而订阅消息就是从公告栏上获取公告。

主题

MQTT传输的消息分为: 主题(Topic) 和 负载(payload)两部分 还是以上述的例子,公告栏上会贴很多公告,例如有关 JS、HTML、CSS的,但是我们只想看JS的,那么公告的类型我们就可以将其视为主题。而负载就是具体的内容。

Client

MQTT通信可以通俗的理解成多个client之间通过broker 来进行通信。在我们的平台中,client可以是某个用户,也可以是某个硬件设备。

MQTT broker搭建

由于之前毕设用的mosca搭建的(好像不维护了),因此在这里我们还是使用mosca来搭建一个简易的MQTT broker 附上找到的文档:www.mosca.io/docs/lib/se... (权限管理我觉得在broker中来配置,有点麻烦且可扩展性不强(可能因为我目前太菜了),因此目前想着通过服务端来控制,如何让其进行二次鉴权后续学习后再来编写) 文档很简单,我们目前主要用到以下函数:

  1. server.authenticate:用于对客户端进行身份验证。可以通过在服务器上设置身份验证逻辑来使用该方法。
  2. server.authorizePublish:用于控制客户端是否可以发布消息到指定主题。可以在服务器上设置发布授权逻辑来使用该方法。
  3. server.authorizeSubscribe:用于控制客户端是否可以订阅指定主题。可以在服务器上设置订阅授权逻辑来使用该方法。
  4. server.published:用于监听消息发布事件。当有客户端发布消息时,可以通过该方法监听并处理消息。
  5. server.subscribe:用于订阅指定主题。可以在服务器上使用该方法来订阅特定主题,并处理接收到的消息。
  6. server.unsubscribe:用于取消订阅指定主题。可以在服务器上使用该方法来取消订阅特定主题。
  7. server.publish 是一个用于发布消息到指定主题的方法。它接受一个包含消息内容和主题的对象作为参数,并将该消息发布到指定的主题。

此外,还有server.on() 方法。该方法我认为可以代替上述的大多数函数。 server.on() 方法可以用于监听多种事件,并为每种事件指定不同的回调函数。以下是一些常用的事件和对应的监听方法:

  • ready:当 MQTT broker 准备就绪并开始监听连接时触发。

    js 复制代码
    server.on('ready', () => {
        console.log('Mosca server is up and running');
    });
  • clientConnected:当有新的客户端连接到服务器时触发。

    js 复制代码
    server.on('clientConnected', (client) => {
        console.log(`Client connected: ${client.id}`);
    });
  • clientDisconnected:当客户端断开连接时触发。

    js 复制代码
    server.on('clientDisconnected', (client) => {
        console.log(`Client disconnected: ${client.id}`);
    });
  • subscribed:当客户端订阅主题时触发。

    js 复制代码
    server.on('subscribed', (topic, client) => {
        console.log(`Client ${client.id} subscribed to topic: ${topic}`);
    });
  • unsubscribed:当客户端取消订阅主题时触发。

    js 复制代码
    server.on('unsubscribed', (topic, client) => {
        console.log(`Client ${client.id} unsubscribed from topic: ${topic}`);
    });
  • published:当有消息被发布到服务器时触发。

    js 复制代码
    server.on('published', (packet, client) => {
        console.log(`Published: ${packet.topic}`);
    });

在node环境下搭建简单的MQTT broker 具体代码如下: 安装mosca npm install mosca

js 复制代码
const mosca = require('mosca');

// 创建 Mosca 服务器
const settings = {
    port: 1883 // MQTT 默认端口
};

const server = new mosca.Server(settings);

// 监听客户端连接事件
server.on('clientConnected', (client) => {
    console.log(`Client connected: ${client.id}`);
});

// 监听客户端断开事件
server.on('clientDisconnected', (client) => {
    console.log(`Client disconnected: ${client.id}`);
});

// 监听 MQTT 消息发布事件
server.on('published', (packet, client) => {
    console.log(`Published: ${packet.topic}`);
});

// 监听 Mosca 服务器就绪事件
server.on('ready', () => {
    console.log('Mosca server is up and running');
});
相关推荐
TESmart碲视6 小时前
HKS201-M24 大师版 8K60Hz USB 3.0 适用于 2 台 PC 1台显示器 无缝切换 KVM 切换器
单片机·嵌入式硬件·物联网·游戏·计算机外设·电脑·智能硬件
TDengine (老段)9 小时前
TDengine STMT2 API 使用指南
java·大数据·物联网·时序数据库·iot·tdengine·涛思数据
zskj_zhyl19 小时前
智慧养老丨从依赖式养老到自主式养老:如何重构晚年生活新范式
大数据·人工智能·物联网
DeamoTech20 小时前
ESCADA
物联网·测试工具
星源~1 天前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
大美B端工场-B端系统美颜师1 天前
多模态数据融合预警:从IoT传感器到卫星监测的可视化方案升级
物联网·交互·数据预警
小赖同学啊2 天前
物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
物联网·unity·游戏引擎
小赖同学啊2 天前
区块链技术在物联网(IoT)中的核心应用场景
物联网·区块链
时序数据说2 天前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
御控工业物联网2 天前
物联网仿真实训教学平台:以网关为核,重塑教育新范式
物联网·工业智能网关·实训教学·物联网实训平台·教育实训平台