正文
大家周末好,我是bug菌~
最近项目中用到了MQTT,感觉挺优秀的一种协议,所以这里分享一些相关的知识。
1
什么是MQTT
MQTT是一种轻量级的消息传输协议,用于物联网设备和应用程序之间的通信。其最初由IBM开发,现在已成为开放的OASIS标准。
该协议基于发布/订阅模式(Publish/Subscribe Pattern),支持多种质量等级(Quality of Service,QoS),可以实现可靠的消息传输和传输后的可靠存储。
其主要特点如下:
1. 轻量级和低带宽:采用二进制编码和可变长度编码,使得消息头的大小尽可能小,能够在低带宽环境下进行高效的数据传输。
2. 灵活和可扩展:支持多种消息发布/订阅模式,能够灵活地适应不同的应用场景。同时,MQTT协议还支持多种质量等级,使得消息传输的可靠性和效率能够根据应用的需求进行调整。
3. 可靠性和安全性:支持消息的持久化和存储,能够保证消息的可靠传输和传输后的可靠存储。同时,还支持加密和认证等安全机制,能够保证消息的安全传输和处理。
4. 易于使用和实现:议规范简单明了,易于理解和实现。还提供了多种客户端库和开发工具,方便快速地使用和集成该协议。
2
MQTT开源库
1、paho-mqtt-c的开源的MQTT协议栈库,Paho MQTT 是 Eclipse 实现的基于 MQTT 协议的客户端。
2、uMQTT,uMQTT 软件包是 RT-Thread 自主研发的,基于 MQTT 3.1.1 协议的客户端实现。
3
MQTT协议的设计
MQTT的核心设计模式是发布/订阅模式(Publish/Subscribe Pattern),它是一种消息传递模式,用于解耦消息的发送者和接收者之间的关系。
在MQTT中,发布/订阅模式的实现包括以下几个核心概念:
1. 主题(Topic):主题是MQTT中消息的标识符,用于指定消息的内容和接收者。主题由一个或多个主题等级(Topic Level)组成,主题等级之间用斜杠(/)分隔。
例如,topic/a/b/c就是一个由三个主题等级组成的主题。
2. 客户端(Client):MQTT中的客户端是指连接到MQTT代理服务器的设备或应用程序,它可以是发布者(Publisher)或订阅者(Subscriber)。
3. 代理服务器(Broker):MQTT中的代理服务器是指负责接收、路由和转发消息的中间件。代理服务器会维护一个或多个主题,客户端可以向代理服务器发布消息或订阅主题。
4. 发布者(Publisher):MQTT中的发布者是指发布消息的客户端。发布者将消息发送到代理服务器,代理服务器会根据消息的主题将其路由到订阅了相应主题的订阅者。
5. 订阅者(Subscriber):MQTT中的订阅者是指订阅主题的客户端。订阅者向代理服务器订阅特定的主题,代理服务器会将订阅者订阅的主题和相关信息保存在订阅列表中。当有新消息发布到订阅者订阅的主题时,代理服务器会将消息发送给订阅者。
在MQTT的发布/订阅模式中,发布者和订阅者之间是解耦的,它们不需要知道对方的存在和身份,只需要知道相应的主题即可。
这种设计模式使得MQTT具有高度的灵活性和扩展性,能够适应不同的应用场景和需求。同时,MQTT还支持多种质量等级,可以根据应用的需求选择不同的质量等级,以实现消息传输的可靠性和效率。
4
几种应用模式
MQTT支持多种消息发布/订阅模式,常见的应用模式如下:
1. 点对点模式(Point-to-Point):在点对点模式下,MQTT客户端直接连接到MQTT代理服务器,通过MQTT协议进行消息的传输。
这种模式适用于直接连接的物联网设备和应用程序之间的通信,如传感器和控制器之间的通信。
2. 发布/订阅模式(Publish/Subscribe):在发布/订阅模式下,MQTT客户端通过订阅主题(Topic)来接收感兴趣的消息,通过发布主题来发送消息。
这种模式适用于需要解耦消息发送者和接收者之间的关系的应用场景,如物联网中的实时数据传输、远程控制和状态监测等。
3. 请求/响应模式(Request/Response):在请求/响应模式下,MQTT客户端通过请求主题(Request Topic)向MQTT代理服务器发送请求消息,MQTT代理服务器将请求消息路由到相应的处理程序,并返回响应消息。
这种模式适用于需要请求和响应交互的应用场景,如物联网中的远程管理和控制等。
4. 点对多模式(Point-to-Multipoint):在点对多模式下,一个MQTT客户端可以同时连接到多个MQTT代理服务器,通过MQTT协议进行消息的传输。
这种模式适用于需要同时连接多个MQTT代理服务器的应用场景,如物联网中的分布式处理和数据存储等。
5
简单应用
下面以一个物联网温度监测系统为例,来说明MQTT的发布/订阅模式:
假设物联网温度监测系统包括多个温度传感器和一个温度数据中心,其中每个温度传感器都能够实时采集温度数据并将其发布到指定的主题上,温度数据中心则订阅了多个主题,能够实时接收并处理温度数据。
这个过程可以通过以下步骤来实现:
1. 温度传感器连接到MQTT代理服务器,并发布温度数据到指定的主题上,例如topic/temperature。
2. 温度数据中心连接到MQTT代理服务器,并订阅温度数据的主题,例如topic/temperature。
3. 当温度传感器发布新的温度数据到主题topic/temperature时,MQTT代理服务器将会将这条消息路由到订阅了该主题的温度数据中心上。
4. 温度数据中心收到新的温度数据后,可以对数据进行处理和存储,例如计算平均温度、生成报表等等。
通过这种方式,MQTT的发布/订阅模式实现了温度传感器和温度数据中心之间的解耦,不需要知道对方的存在和身份,只需要知道相应的主题即可实现实时的数据传输和处理。
最后
好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个赞~
bug菌唯一、永久嵌入式技术知识平台~
推荐专辑 点击蓝色字体即可跳转
☞ MCU进阶专辑
☞ 嵌入式C语言进阶专辑
☞ “bug说”专辑
☞ 专辑|Linux应用程序编程大全
☞ 专辑|学点网络知识
☞ 专辑|手撕C语言
☞ 专辑|手撕C++语言
☞ 专辑|经验分享
☞ 专辑|电能控制技术
☞ 专辑 | 从单片机到Linux