Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Network
kawaii-mqtt的 v1.1.0版本发布
发布于 2020-06-18 21:12:05 浏览:2715
订阅该版
[tocm] * 本帖最后由 杰杰 于 2020-6-18 21:15 编辑 * > 轻轻吐槽一下,本来不想开新帖的,但是居然发现改不了原来的帖子,实在是太难受了。。。。 # kawaii-mqtt **一个高性能、高稳定性的跨平台MQTT客户端** 一个高性能、高稳定性的跨平台MQTT客户端,基于socket API之上开发,可以在嵌入式设备(FreeRTOS/LiteOS/RT-Thread/TencentOS tiny)、Linux、Windows、Mac上使用,拥有非常简洁的API接口,以极少的资源实现QOS2的服务质量,并且无缝衔接了mbedtls加密库。 ## 优势: - **具有极高的稳定性**:无论是**掉线重连**,**丢包重发**,都是**严格遵循MQTT协议标准**执行,除此之外对**大数据量**的测试无论是收是发,都是非常稳定,**高频**测试也是非常稳定。 - **轻量级**:整个代码工程极其简单,不使用mbedtls情况下,占用资源极少,作者曾使用esp8266模组与云端通信,整个工程代码消耗的RAM不足15k。 - **支持mbedtls加密传输**,让网络传输更加安全,而且接口层完全不需要用户理会,无论是否加密,mqttclient对用户提供的API接口是**固定**的,这就很好的兼容了一套代应用层的码可以加密传输也可以不加密传输。 - **支持多客户端**,同时兼容多个客户端运行工作,一个设备连接多个的服务器。 - **支持同步异步处理**,应用程序无需阻塞等待浪费CPU资源。 - **支持拦截器配置**,在某些平台中,客户端会默认自动订阅系统主题,而且每次来自服务器的主题都是变动的,此时需要使用拦截器进行拦截,分离主题与数据信息,并递交给用户,极大提高灵活性。 - **拥有在线代码生成工具**,极其简单配置就可以生成对应的代码,地址:[https://jiejietop.gitee.io/mqtt/index.html](https://jiejietop.gitee.io/mqtt/index.html) - **拥有极简的API接口**,总的来说,mqttclient的配置都有默认值,基本无需配置都能使用的,也可以随意配置,对配置都有健壮性检测,这样子设计的API接口也是非常简单。 - **多功能参数可配置可裁剪**,重连时间间隔、心跳周期、最大订阅数量、命令超时、读写缓冲区大小、拦截器处理等等参数功能可裁剪可配置,满足开发者再复杂、简单等各种开发环境下的使用需求。 - **支持自动重新订阅主题**,在自动重连后保证主题不会丢失。 - **支持主题通配符`“#”、“+”`**。 - **订阅的主题与消息处理完全分离**,让编程逻辑更加简单易用,用户无需理会错综复杂的逻辑关系。 - **mqttclient内部已实现保活处理机制**,无需用户过多关心理会,用户只需专心处理应用功能即可。 - **拥有非常好的设计**,以极少的资源设计了**记录机制**,当报文在丢失的时候进行重发操作,确保qos1、qos2服务质量等级的报文保证其服务质量。 - **有非常好的代码风格与思想**:整个代码采用分层式设计,代码实现采用异步处理的思想,降低耦合,提高性能。 - **基于标准BSD socket之上开发**,只要是兼容BSD socket的系统均可使用。 - **无缝衔接salof**:它是一个同步异步日志输出框架,在空闲时候输出对应的日志信息,也可以将信息写入flash中保存,方便调试。 - **使用著名的 paho mqtt 库封包**。 - **无其他依赖**。 ## 在线代码生成工具 本项目拥有代码生成工具,只需要在线配置即可生成代码,极其简单易用,代码生成工具地址:[https://jiejietop.gitee.io/mqtt/index.html](https://jiejietop.gitee.io/mqtt/index.html) ![在线代码生成工具](![FastAdmin](http://qiniu.jiejie01.top/mqtt-tool.png)) ## 占用资源大小 总计占 **10857字节** 的ROM,而RAM的开销则几乎只依赖动态内存,在不使用TLS加密传输的情况下,维持QOS0服务质量等级的通信动态内存大约仅需要**3694**字节,这包括1024读缓冲区 + 1024写缓冲区 + 1024内部线程栈大小,相对于其他MQTT客户端来说,mqttclient需要的RAM资源开销极少。 | Code | RO Data | RW Data | ZI Data | Object Name | | -- | -- | -- | -- | -- | | 7118 | 791 | 0 | 0 | mqttclient.o | | 546 | 0 | 0 | 0 | mqttconnectclient.o | | 212 | 0 | 0 | 0 | mqttdeserializepublish.o | | 476 | 0 | 4 | 0 | mqttpacket.o | | 236 | 0 | 0 | 0 | mqttserializepublish.o | | 310 | 0 | 0 | 0 | mqttsubscribeclient.o | | 38 | 0 | 0 | 0 | mqttunsubscribeclient.o | | 56 | 0 | 0 | 0 | nettype_tcp.o | | 62 | 0 | 0 | 0 | network.o | | 24 | 0 | 0 | 0 | platform_memory.o | | 40 | 0 | 0 | 0 | platform_mutex.o | | 344 | 0 | 0 | 0 | platform_net_socket.o | | 94 | 0 | 0 | 0 | platform_thread.o | | 70 | 0 | 0 | 0 | platform_timer.o | | 246 | 0 | 4 | 0 | random.o | | 62 | 0 | 0 | 0 | mqtt_list.o | | - | - | - | - | - | | 10066 | 791 | 8 | 0 | total | ## 整体框架 拥有非常明确的分层框架。 ![整体框架](![FastAdmin](http://qiniu.jiejie01.top/mqttclient.png)) - 在框架的最上方是**API**函数接口,实现了客户端的**申请、释放、设置参数、连接服务器、断开连接、订阅主题、取消订阅主题、发布消息**等函数接口。 - 使用了著名的**paho mqtt**库作为MQTT报文封包库。 - 采用异步处理的机制去管理所有的ack,它在发送报文的时候不用等待服务器的应答,只是记录下来,在收到服务器的ack后,取消这个记录,**效率极高**;而在发送mqtt报文(QoS1/QoS2)的时候没有收到服务器的应答时,将**重发**该报文。 - 内部实现了一个**mqtt yield**线程,统一处理所有的内容,比如**超时的处理、ack报文的处理、收到来自服务器的publish报文**,此时会去调用回调函数告知用户收到的数据,**发布释放、发布完成报文的处理、心跳报文(保持活性),当与服务器断开连接时需要尝试重连、重新订阅主题,重新发送报文或者应答**等。 - 报文的处理,如**读写报文、解码mqtt报文、设置报文(dup标记)、销毁报文**等操作。 - **network**是网络组件,它可以**自动选择数据通道**,如果是加密方式则通过**tls加密**进行数据传输,而tls可以选择mbedtls作为加密后端;也可以是**tcp直连**方式,最终都是通过tcp传输的。 - **platform**是平台抽象层,封装了不同系统的东西,比如**socke或者AT,线程、时间、互斥锁、内存管理**,这些是与系统打交道的,也是跨平台必要的封装。 - 最右边的则是通用的内容,**list的处理、日志库、错误处理、软件随机数发生器**等。 ## 支持的平台 **目前已实现了Linux、TencentOS tiny、FreeRTOS、RT-Thread平台(已做成软件包,名字为`kawaii-mqtt`),除此之外TencentOS tiny的AT框架亦可以使用,并且稳定性极好!** | 平台 | 代码位置 | | -------------- | -------- | | Linux | [https://github.com/jiejieTop/mqttclient](https://github.com/jiejieTop/mqttclient) | | TencentOS tiny | [https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429](https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429) | | TencentOS tiny AT 框架 | [https://github.com/jiejieTop/gokit3-board-mqttclient](https://github.com/jiejieTop/gokit3-board-mqttclient) | | RT-Thread | [https://github.com/jiejieTop/kawaii-mqtt](https://github.com/jiejieTop/kawaii-mqtt) | | FreeRTOS | [https://github.com/jiejieTop/freertos-mqttclient](https://github.com/jiejieTop/freertos-mqttclient) | ## 版本 | 发布版本 | 描述 | | --- | --- | | [v1.0.0] | 初次发布,完成基本框架及其稳定性验证 | | [v1.0.1] | 修复主动与服务器断开连接时的逻辑处理 | | [v1.0.2] | 添加新特性——拦截器,修复一些小bug | | [v1.0.3] | 避免造成全局污染修改了log、list相关函数的命名 | | [v1.0.4] | 重新调整了network结构与mbedtls数据通道 | | [v1.1.0] | 一个较大版本的更新,重构部分代码,优化MQTT处理的逻辑,提升整体的稳定性,支持多客户端,支持设置遗嘱,优化API接口,增加多个云平台的测试代码与说明文档,增加在线代码生成工具、在线裁剪配置工具 | ## 问题 欢迎以 [GitHub Issues](https://github.com/jiejieTop/mqttclient/issues) 的形式提交问题和bug报告 ## 版权和许可 mqttclient 遵循 [Apache License v2.0](https://github.com/jiejieTop/mqttclient/blob/master/LICENSE) 开源协议。鼓励代码共享和尊重原作者的著作权,可以自由的使用、修改源代码,也可以将修改后的代码作为开源或闭源软件发布。 ### 测试程序 | 测试平台 | 位置 | | -- | -- | | emqx(我私人部署的服务器) | [https://github.com/jiejieTop/mqttclient/blob/master//test/emqx/test.c](https://github.com/jiejieTop/mqttclient/blob/master//test/emqx/test.c) | | 百度天工 | [https://github.com/jiejieTop/mqttclient/blob/master//test/baidu/test.c](https://github.com/jiejieTop/mqttclient/blob/master//test/baidu/test.c) | | onenet | [https://github.com/jiejieTop/mqttclient/blob/master//test/onenet/test.c](https://github.com/jiejieTop/mqttclient/blob/master//test/onenet/test.c) | | 阿里云物联 | [https://github.com/jiejieTop/mqttclient/blob/master//test/ali/test.c](https://github.com/jiejieTop/mqttclient/blob/master//test/ali/test.c) | ## 学习更多 请看文档: - [MQTT协议简介](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-introduction.md) - [MQTT协议通信过程](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-communication.md) - [mqttclient代码生成工具](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-tool.md) - [mqttclient配置及裁剪工具](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-config.md) - [mqttclient设计与实现方式](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-design.md) - [mqttclient连接到百度天工物接入](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-baidu.md) - [mqttclient连接到OneNET云平台](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-onenet.md) - [mqttclient连接到阿里云物联网平台](https://github.com/jiejieTop/mqttclient/blob/master/docs/mqtt-aliyun.md)
查看更多
21
个回答
默认排序
按发布时间排序
fhqmcu
认证专家
2020-06-30
个人博客:https://blog.csdn.net/fhqlongteng
目前mqtt协议,已经发现并且解决7处bug, 并且解决完成,初步测试稳定工作。正在进行长时间的稳定性测试,有需要的朋友可以与我联系,提供修改后的代码一起验证测试。待测试稳定后,提交给pr给杰杰。 1、platform_thread.c函数中的创建线程,删除线程的方式存在使用已经释放的内存的问题,修改platform_thread_init函数内部采用rt_thread_creat方式创建 ,线程释放时调用的platform_thread_destroy函数置空线程指针就可以了, 已经修改 2、mqtt_send_packet函数内部已经对timer变量进行了初始化和操作,把timer变量内置为此函数的局部变量,相关外部调用不用初始化, 有一个个例的地方:mqtt_connect_with_results函数的第1005 1008行发送包和接收包函数都会使用同一个connect_timer,这里要求此变量外置。 已经修改 3、platform_timer_init(&timer); platform_timer_cutdown(&timer, c->mqtt_cmd_timeout);这两个函数都是对同一变量进行赋值,建议去除第一个函数,已经修改,删除第一个函数 已经修改 4、mqtt_connect_with_results,内部申请的发送与接收缓冲区放到mqtt_lease函数中进行。解决多次重新连接导致的内存泄漏 连接失败时,不执行释放platform_memory_free(c->mqtt_network),方便下次接着使用。 1025行启动函数只执行一次就可以,删除下和行的。 增加创建线程失败的打印,位于1031行,同时断开链接 已经修改完成 5、ack list链表的写入访问采用c->mqtt_write_lock信号量来进行保护, mqtt_publish_packet_handle函数中的调用mqtt_ack_list_record未进行保护?已解决 6、mqtt_ack_list_unrecord函数对链表的操作没有被c->mqtt_write_lock进行保护?这是为什么 已解决 7、mqtt连接断开再重连时,出现内存耗用增加64字节-128字节不等的情况。这时由于断开重新连接网络后mqtt_subscribe函数重新订阅,申请的内存导致的,这里的链表的处理导致内存泄漏了。 已解决。
Hubert_Xie
2020-06-18
这家伙很懒,什么也没写!
和 umqtt 对比,优缺点是什么?
jerry4cool
2020-06-19
这家伙很懒,什么也没写!
感谢分享。。。。
我夏了夏天
认证专家
2020-06-19
Life isn't about finding yourself, life is about creating yourself.
楼主真赞!
springcity
2020-06-19
这家伙很懒,什么也没写!
杰神,牛逼~
杰杰
2020-06-19
这家伙很懒,什么也没写!
>和 umqtt 对比,优缺点是什么? --- 为什么一定要比较勒,喜欢哪个用哪个嘛~rtt最起码是官方维护的,万一我回家开小卖部不在继续维护也是有可能的:lol
杰杰
2020-06-19
这家伙很懒,什么也没写!
>杰神,牛逼~ --- umqtt牛逼一点哈哈哈
springcity
2020-06-20
这家伙很懒,什么也没写!
>umqtt牛逼一点哈哈哈 --- 杰神谦虚了,向杰神多多请教:lol
fhqmcu
认证专家
2020-06-21
个人博客:https://blog.csdn.net/fhqlongteng
赞,最近正在研究你的mqtt,准备商用一把。
杰杰
2020-06-21
这家伙很懒,什么也没写!
>赞,最近正在研究你的mqtt,准备商用一把。 --- :lol是我的荣幸啊哈哈哈哈哈
撰写答案
登录
注册新账号
关注者
0
被浏览
2.7k
关于作者
杰杰
这家伙很懒,什么也没写!
提问
4
回答
44
被采纳
0
关注TA
发私信
相关问题
1
lwip1.4.1连接经常会断开无法连接上,可以ping通
2
LPC1768:RTT+LWIP+webserver用IE刷网页出现硬件中断错误(已经解决)
3
求一些LWIP开发的经验,目前ping一直不稳定。
4
stm32f207+dp83848无法ping通
5
RTT下的LWIP传递机制
6
rtt内lwip的socket是否是线程安全?
7
Lwip+enc28j60无法ping通
8
坑爹的rtconfig.h lwip关掉了checksum
9
花了一个晚上,把RT2.0的LWIP、网卡驱动、文件系统整合起来了,发现一点小问题
10
lwip例程中udp发送时如何指定源端口发送到指定目的地端口
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部