IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MQTT协议产品化实现-mosquitto开源产品(1) -> 正文阅读

[嵌入式]MQTT协议产品化实现-mosquitto开源产品(1)

? ? ? ? 前面的mqtt协议是从标准协议的视角进行的分析,接下来的这几个小节将从开源项目(mosquitto)、物联网操作系统(鸿蒙、freertos、rt-thread)对mqtt协议的支持、商业化的HiveMQ项目,三类产品和解决方案的视角去审视一下这个协议是如何实现的。

2.2 mqtt协议实现-mosquitto开源产品

? ? ? ? 为了更加深刻地理解mqtt协议的实现,从本小节开始将以一个开源项目为例,从代码现场去分析协议实现的细节,我们选择的开源项目是mosquitto。

? ? ? ? mosquitto是eclipse的IOT开源项目,该项目主要是实现了broker的角色,支持mqtt协议5.0、3.1.1和3.1版本,非常适合用在低功耗的设备上,比如低功耗的传感器、移动设备如手机、嵌入式设备。除了支持broker以外,该项目也提供了mqtt的客户端c库,支持客户端的发布和订阅模式,详细的介绍请参看参考文献[7]。另外该项目除了实现协议本身外,还提供了相关的辅助功能模块,如数据库模块,安全模块等,在项目开发和移植时具有很大的参考价值。项目的代码可以从参考[8]中得到,当前最新的版本是2.0.12版,我们将以此版本为蓝本进行解读。

2.2.1 mosquitto系统架构

? ? ? ? 在进行开源代码解读之前,首先要对代码的框架有个了解,即从宏观方面把握整个项目的结构,这样才不会陷入到代码细节中。为此笔者先去梳理了一下mosquitto的目录结构,并对目录结构的每一项按照其依赖关系做了如下图所示的分层结构。

? ? ? ? ?从图中可以看出主要包括apps和核心协议栈两大块,其中最重要的是核心协议栈。apps处于顶层,本身依赖于核心协议栈,主要是面对应用界面,对外提供可裁剪的安全的mqtt协议。接下来的核心协议栈,主要是实现了整个的mqtt协议栈,并对外提供产品化服务,其内部又包含了三大块:基础的底层lib,产品化相关的src,客户端有关的client。这三者之间lib是src和client的基础。lib的主要功能是实现mqtt协议栈,跟标准协议实现相对应的,还包括一些基础的系统和网络管理功能,lib可以为broker和client提供业务支撑。src主要是在lib的基础上,对协议栈做了产品化和业务处理,同时也对外提供除协议栈以外的功能,比如数据处理,通信连接等,更加注重端到端的产品化应用,比如bridge产品,更多地承担broker的角色。client主要是对配置做解析,并提供订阅和发布两项基本配置,主要承担客户端角色。

? ? ? ? 接下来进入到每一层(目录)的模块内部,从上图可以看到涉及更多细粒度的模块,还是一样的思路,分类整合模块,这样就可以简化细节,提取关键模块,对每一个层次的功能有更深刻的理解,如下图所示是笔者进一步整理后的架构图。

? ? ? ? 上图中自上而下来看,客户端的功能比较简单,主要就是实现生产和消费数据,对应发布和订阅配置,常用在终端设备上。产品化层对应着src,这个模块主要用在broker侧的设备上,如bridge,包含了中间系统层、产品化协议层和产品配置界面,在内部自上而下依赖,在通信的过程中会对主题、链路状态、数据存储、安全做系统的管理,实现较为复杂。上述两个模块依赖于平台层,平台层分为平台协议和平台系统两层。平台系统层屏蔽了通信和系统的管理,并且提供了日志功能,平台协议层对基础的报文进行解析,管理着通信质量、协议栈等功能。通过这样的层次和模块关系可以很方便地对模块进行移植和裁剪。

? ? ? ? 在上述模块的基础上,我们从发布/订阅的视角看一下数据流向。首先客户端发布主题,该发布信息会被平台层的报文解析模块进行封装,然后通过通信接口发布出去,过程中会对通信质量进行管理。作为broker端,即图中的产品化层在收到发布的主题后,会将topic存在数据库中,等待订阅者过来订阅,broker端还会实时检测链路状态、安全等。最后当另外一个客户端过来订阅主题时,同样由平台层的报文解析模块进行封装,然后发送订阅消息。这样就完成了一次完整的通信过程。

? ? ? ? 通过这张图可以一目了然地看到数据流向以及所依赖地模块,也能非常清晰地看出在具体的产品实现场景,哪些模块需要移植到客户端,哪些模块需要移植到broker端。

未完待续...

参考文献:

[3]商业化的mqtt组织HiveMQ Introduction :: HiveMQ Documentation

[4]Networking 101: Transport Layer Security (TLS) - High Performance Browser Networking (O'Reilly) (hpbn.co)

[5]MQTT Security Fundamentals - How to use MQTT in a secure way (hivemq.com)

[6]MQTT协议5.0中文版 | MQTT中文网 (p2hp.com)

[7]Eclipse Mosquitto

[8]Download | Eclipse Mosquitto

? ? ? ??

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:50:31  更:2021-12-16 17:50:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:39:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码