从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');
});
相关推荐
AI+程序员在路上8 小时前
REST架构风格介绍
物联网·架构·restful·web
厦门辰迈智慧科技有限公司1 天前
城市综合管廊监测与维护一体化解决方案
物联网·自动化·监测
IP管家1 天前
物联网设备远程管理:基于代理IP的安全固件更新通道方案
服务器·网络·物联网·网络协议·tcp/ip·安全·ip
搬码临时工1 天前
远程连接电脑的方法?异地远程桌面连接和三方软件实现
运维·服务器·网络·物联网·电脑·远程工作
mftang1 天前
Zephyr OS Nordic芯片的Flash 操作
单片机·嵌入式硬件·物联网
JANYI20181 天前
物联网中的WiFi模式解析:AP、STA与混合模式
物联网·智能路由器
程序猫A建仔2 天前
【物联网】基于树莓派的物联网开发【4】——WIFI+SSH远程登录树莓派
运维·物联网·ssh
程序猫A建仔2 天前
【物联网】基于树莓派的物联网开发【3】——最新镜像下载和烧录
物联网
欢乐熊嵌入式编程2 天前
智能手表集成测试报告(Integration Test Report)
嵌入式硬件·物联网·目标跟踪·集成测试·智能手表
工业通讯探索者2 天前
Profinet转Ethernet/IP网关模块通信协议适配配置
物联网·西门子plc·数据交互·网关模块