测试环境:stm32f401rct6、rt-thread版本: v4.1.0、rt-thread studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。
1、测试介绍
我移植的这个at驱动还不完善,频繁发送消息时会导致网络断连,打开调试进行一些延时就没问题了。但是断连的特性反而有助于我们进行qos测试。
因为我们要测试断网后qos消息质量的稳定性,所以 cleansessionflag(清除会话)必须为false
由于我们要测试中途被mqtt服务器踢掉后的效果,所以示例使用的我的mqtt服务器,您如果有兴趣测试这个的话请修改配置信息为您的服务器
要测试的功能如下图。都是发送20条消息。
2、测试发布qos1 / qos2消息
网络正常情况发送,发送qos1消息
打印日志上面红框表示ryanmqtt发布了多少条消息也就是 ryanmqttpublish 接口回复ok的次数,下面表示真正完成发布了多少条
emqx截图,可以看到是20条。但细心的你肯定发现了发送的信息居然不是按顺序来的,这是因为emqx设置订阅的qos2主题,实际显示将会按照qos2完成时间来进行显示
网络正常情况发送,发送qos2消息
模拟发送中途断网,发送qos1消息
这里模拟的意思是:发送第5条的时候把网络硬件进行关闭,发送第10条时启动网络硬件,观察发布消息和实际消息是否对得上号
看上面日志咱们发送了12条,emqx为什么会收到13条呢?
这就是qos1的特性了,允许至少一次的重复接收,咱们断网重新连接的时候根据qos1的特性咱们是可以重新发送的。
模拟发送中途断网,发送qos2消息
这里模拟的意思是:发送第5条的时候把网络硬件进行关闭,发送第10条时启动网络硬件,观察发布消息和实际消息是否对得上号
这里我们就遇到了开头说的ec800m驱动问题,qos2需要较多的网络交互,ec800直接罢工了。
但是等它重连后我们可以发现,qos2的消息依然可以稳定保证只有一次。(之前我自己进行的测试要比这严谨的多,会考虑到多次断网情况等)
模拟发送中途被踢,发送qos1消息
模拟中途被踢:发送20条,在中间的时候手动通过mqtt管理后台把ryanmqtt客户端踢掉
这个测试真考验手速啊,试了4次才成功。
可以看到发送到15条的时候被mqtt服务器给踢掉了,等待重连后可以正常同步
模拟发送中途被踢,发送qos2消息
模拟中途被踢:发送20条,在中间的时候手动通过mqtt管理后台把ryanmqtt客户端踢掉
可以看到发送了15条,但是收到了21条!是bug吗?其实不然,这主要是emqx服务器的策略问题,因为是主动剔除emqx服务器会清除会话上下文,导致qos2消息多接收。
所以说重大风险的环境,一定不要只依靠qos2,太多因素会导致意料之外的结果。一定要通过应用层来保证最终一致性
2、测试订阅qos1 / qos2消息
为了方便观察效果,我们使用emqx的脚本功能,给所有发送消息尾部加一个0 - 1000的随机值。方便观察消息接收情况。
脚本如下
网络正常情况接收,接收qos1消息
网络正常情况接收,接收qos2消息
模拟接收中途断网,接收qos1消息
实验条件:使用mqttx上位机发布10条消息,ryanmqtt收到第5条后重启网络硬件,看联网后是否可以接收到消息
模拟接收中途断网,接收qos2消息
实验条件:使用mqttx上位机发布10条消息,ryanmqtt收到第5条后重启网络硬件,看联网后是否可以接收到消息
模拟接收中途被踢,接收qos1消息
模拟接收中途被踢,接收qos2消息
实验条件:我使用mqttx的自动发送功能,一秒发一条。发送20条消息,当发送5 - 10条后从emqx服务器剔除ryanmqtt客户端
尴尬的发现没法测试,上面测试发布消息剔除的时候说过emqx服务器的剔除会清除会话信息,清除后会话信息,虽然ryanmqtt依然保留着订阅主题信息,但是emq服务器的订阅信息不存在了。
所以不管有没有使能clearsession,都非常推荐在连接成功回调函数中订阅主题。
阿里云POLARDB实现高性价比混合全闪云原生数据库
南方轴承:公司经营业务将向集成电路行业进一步跨越扩张
喷墨打印机常见问题
OPC智能网关实现各行业工厂设备数据采集和通信组网
NANK南卡A2降噪耳机登场:四百内最强TWS降噪耳机?
对RyanMqtt的QOS消息质量稳定性进行测试
蓝牙无线个人局域网的组建方案解析
7月27日武汉汽车制博展,台湾高技与您武汉见!
电动汽车的高压线束焊接技术
长城汽车正式面向墨西哥市场带来首款车型哈弗H6 HEV
基于Java的接口快速开发框架
首款运用自主芯片的小米5c行将发布, 亮点多多, 值得期待
印度对新能源汽车需求迫切,电动汽车备受印度消费者喜欢
支付宝发大招 能在五年内实现无现金社会吗
一直在融资一直在缺钱:贾老板拉到了珠海国资委的投资,这次应该能回国了吧?
使用高速微控制器系列进行内存扩展
介绍数字芯片设计的十大流程
首款国产智能电视芯片量产 打破外资垄断局面
电子设备的浪涌抗扰度试验测试设计
程序员职场容易产生的几点误区