我是靠谱客的博主 生动大地,最近开发中收集的这篇文章主要介绍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

        

最后

以上就是生动大地为你收集整理的MQTT协议产品化实现-mosquitto开源产品(1)的全部内容,希望文章能够帮你解决MQTT协议产品化实现-mosquitto开源产品(1)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部