paho-mqtt icon indicating copy to clipboard operation
paho-mqtt copied to clipboard

压力测试读取队列处理丢包

Open ZHANGHSING opened this issue 6 years ago • 3 comments

if (FD_ISSET(c->pub_pipe[0], &readset)) { MQTTMessage *message; MQTTString topic = MQTTString_initializer;

        LOG_D("pub_sock FD_ISSET");

        len = read(c->pub_pipe[0], c->readbuf, c->readbuf_size);
         .......

同时往队列加入多个数包时,len将所有数据读取出来,却只处理了最前一条数据导致后面数据丢失

如:一个数据包长度为57,同时2包数据加入队列(环境:在MQTT任务处理其它任务时加入) 读取出来的len长度为114,这时只有一会发送一包数据到服务器

ZHANGHSING avatar Jun 01 '19 02:06 ZHANGHSING

我在压力测试的发现单片机会跑飞,12个小时之内就会跑飞,且没任何异常抛出,没加任何功能,直接用自带的DEMO,请问你有遇到这个问题吗?

Ackleys avatar Feb 06 '20 06:02 Ackleys

if (FD_ISSET(c->pub_pipe[0], &readset)) { MQTTMessage *message; MQTTString topic = MQTTString_initializer;

        LOG_D("pub_sock FD_ISSET");

        len = read(c->pub_pipe[0], c->readbuf, c->readbuf_size);
         .......

同时往队列加入多个数包时,len将所有数据读取出来,却只处理了最前一条数据导致后面数据丢失

如:一个数据包长度为57,同时2包数据加入队列(环境:在MQTT任务处理其它任务时加入) 读取出来的len长度为114,这时只有一会发送一包数据到服务器

确实有这种情况,我每5秒钟发布一个心跳包给服务器,然后不定期发布其他数据给服务器的时候就会发现,这两种数据有一种被丢弃了

SmartFrogFromChina avatar May 11 '20 01:05 SmartFrogFromChina

我也有遇到,同时publish多个必失败,而且即使配置为阻塞发送,源码中的pub_mutex好像也并没有起到该有的作用,原因是mutex被其它应用线程持有,却试图由paho_mqtt_thread线程释放,这在rt thread中是不支持的

lizdDong avatar Dec 29 '22 08:12 lizdDong