Giter Site home page Giter Site logo

paho-mqtt's Issues

关于例程paho_mqtt_app中的client,有没有必要定义两个?

在跟服务器对接时,服务器的开发人员说应当定义两个client ,一个用于发布,一个用于订阅;
我看了下结构体MQTTClient 里面有用发布、订阅和遗言的主题。一个client就能满足发布订阅。请问有必要创建两个MQTTClient 一个用于发布,一个用于订阅?

MQTT 组件 IAR 上编译报错

paho_mqtt.h 文件中:

enum __attribute__ ((aligned (4))) QoS { QOS0, QOS1, QOS2 };

该语法在 IAR 上不支持编译报错,Keil 上支持,有什么合适的修改方式?

停止机制不完整,用户无法在MQTT线程停止时收到通知或等待线程停止

如题,无法收到通知或等待停止时,会遇到无法正常释放MQTTClient对象,如果这个对象是malloc创建的话,将无法合适地free这个对象。
在stop之后不能释放,因为MQTT线程还在使用该对象,当MQTT线程退出时,其它线程无法得知。目前只能使用线程钩子来实现这个通知。
正确的退出流程应该有一个通知回调,或在stop方法里等待线程退出。

mqtt 同时发布消息的时候会丢失后面的消息

原因是并发时会同时将数据放置在管道里,但是没有把包区分开来,下一次发数据的时候把所有的数据都发出去了,所以应该在管道处表明有多少条数据,每条数据的长度多少

MQTT中订阅相关问题

1.当未订阅topic的情况下,尝试连接MQTT的服务器,在paho_mqtt_pipe.c ->line 832 : const char *topic = c->messageHandlers[i].topicFilter; 中 topic参数为空,后续会导致出错。
2.需要提供专门用于订阅topic的API,当前代码,没提供多次订阅的功能(比如:开始订阅了一个topic,连接上代理后,还想再订阅一个topic。这种操作就无法实现)

D/mqtt: net_read 0:1, break! fail on publish

I use the paho_mqtt_publish function, and it fails at net_read() function in pahomqtt-v1.1.0\MQTTClient-RT\paho_mqtt_pipe.c.
I downgraded from 4.1.1->4.1.0, both fails, but 4.0.5 is working !?

[HUST-CSE] 函数 MQTTDeserialize_publish 的返回值异常导致非法地址访问

MQTT_cycle 函数在接收到 PUBLISH 类型的 mqtt 报文时,会调用 MQTTDeserialize_publish 函数解析报文内容。该函数中包含问题的部分如下:

curdata += (rc = MQTTPacket_decodeBuf(curdata, &mylen));
enddata = curdata + mylen;

if (!readMQTTLenString(topicName, &curdata, enddata) || enddata - curdata < 0)
    goto exit;

调用 MQTTPacket_decodeBuf 并正常返回时,rc 值将被置 1。后续调用 readMQTTLenString 发生错误返回 0 时,topicName 中的 lenstring 将不被初始化,为任意地址,此时 MQTTDeserialize_publish 函数会错误返回 1 表示函数执行成功,使程序继续执行后续逻辑。

后续处理逻辑中访问该 topicName 中的字符串指针将会访问非法地址,导致程序崩溃。

一个可复现的导致崩溃的例子是(以 ASCII 字符串形式表示接收到的报文内容)

0000000000000000000000000000000000000000000000000000000000000000000000000000

单包大小>1024左右, 进入到default_callback 中 , mqttclient 反复无限重启

硬件使用w5500 , 软件使用paho -mqtt 最新软件包
数据接收长度小于 1000字节. 可以正常使用,
但是其他设备发布消息单包长度超过 1024 - 1030 以上后, 会进入default call back 回调函数中, 而且整个mqtt软件模块,接下来就会无限反复重启, 提示ping 超时,
其他网络应用正常使用, 可以正常 使用 finsh 功能ping 路由器, mqtt 服务器 , 开的tcp 也能正常使用,这个有办法解决吗? 或者提高接收缓冲区大小, 没找到在哪里设置

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

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,这时只有一会发送一包数据到服务器

Bug fix: 内存操作错误

文件 : paho_mqtt_pipe.c, 939行
应该是 data[msg_len-1] = 0; //错误的写成了 data[msg_len] = 0; 导致内存操作问题

paho_mqtt_publish implement bug

int paho_mqtt_publish(MQTTClient *client, enum QoS qos, const char *topic, const char *msg_str);
This API implement is dangerous. No initial value given for dup/id of MQTTMessage.
sometimes id default value is 0 which is relative to stack, when some code change.
It's take me several days to find where the bug is.

Client class

I am trying to test the sample file but it is referring to a client class. I cannot find it anywhere in the source. Do I need to create my own client class?

无法安装包

我使用 adminconfig 命令安装,但在输入命令后:pkgs --update 我得到错误:

$ pkgs --update
Traceback (most recent call last):
  File "D:\RT-ThreadStudio\platform\env_released\env\tools\ConEmu\ConEmu\..\..\..\tools\scripts\env.py", line 126, in <module>
    main()
  File "D:\RT-ThreadStudio\platform\env_released\env\tools\ConEmu\ConEmu\..\..\..\tools\scripts\env.py", line 122, in main
    args.func(args)
  File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\__init__.py", line 41, in run_env_cmd
    package_update()
  File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\cmd_package_update.py", line 842, in package_update
    if not install_packages(sys_value, force_update):
  File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\cmd_package_update.py", line 792, in install_packages
    if install_package(env_root, pkgs_root, bsp_root, package, force_update):
  File "D:\RT-ThreadStudio\platform\env_released\env\tools\scripts\cmds\cmd_package\cmd_package_update.py", line 267, in install_package
    url_from_json = package.get_url(package_info['ver'])
KeyError: 'ver'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.