Giter Site home page Giter Site logo

paho-mqtt's Introduction

paho-mqtt

1、介绍

  • Paho MQTT 是 Eclipse 实现的基于 MQTT 协议的客户端,本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程序。

  • paho-mqtt 软件包功能特点以及 MQTT 协议介绍请参考 软件包详细介绍

1.1 目录结构

paho-mqtt 软件包目录结构如下所示:

pahomqtt
├───docs 
│   └───figures                     // 文档使用图片
│   │   api.md                      // API 使用说明
│   │   introduction.md             // 介绍文档
│   │   principle.md                // 实现原理
│   │   README.md                   // 文档结构说明  
│   │   samples.md                  // 软件包示例
│   │   user-guide.md               // 使用说明
│   └───version.md                  // 版本
├───MQTTClient-RT                   // 移植文件
├───MQTTPacket                      // 源文件
├───samples                         // 示例代码
│       mqtt_sample.c               // 软件包应用示例代码
├───tests                           // mqtt 功能测试程序
│   LICENSE                         // 软件包许可证
│   README.md                       // 软件包使用说明
└───SConscript                      // RT-Thread 默认的构建脚本

1.2 许可证

paho-mqtt package 遵循 Eclipse Public License - v 1.0 许可,详见 LICENSE 文件。

1.3 依赖

  • RT-Thread 3.0+

2、获取软件包

使用 paho-mqtt 软件包需要在 BSP 目录下使用 menuconfig 命令打开 Env 配置界面,在 RT-Thread online packages → IoT - internet of things 中选择 Paho MQTT 软件包,操作界面如下图所示:

选中 Paho MQTT 软件包

选择合适的配置项后,使用 pkgs --update 命令下载软件包并添加到工程中即可。

3、使用 paho-mqtt

  • 如何从零开始使用,请参考 用户手册
  • 完整的 API 文档,请参考 API 手册
  • 详细的示例介绍,请参考 示例文档
  • MQTT 协议工作原理,请参考 工作原理
  • 更多详细介绍文档位于 /docs 文件夹下,使用软件包进行开发前请务必查看

4、注意事项

  • 正确填写代理服务器的账号密码

    如果账号密码填写错误,MQTT 客户端将无法正确连接到 MQTT 服务器。

  • 合理配置 MQTT 线程栈

    如果使用 MQTT TLS 加密连接,MQTT 线程栈至少需要 6144 字节。

5、联系方式 & 感谢

paho-mqtt's People

Contributors

aozima avatar armink avatar bernardxiong avatar d1zzy126 avatar enkiller avatar gbcwbz avatar guozhanxin avatar kurisaw avatar lawlieta avatar liukangcc avatar lizddong avatar misonyo avatar murphyzhao avatar mysterywolf avatar orangeyyc avatar parai avatar shihaozhao-2019 avatar sparks-pion avatar summergift avatar vandoul avatar yangjie11 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

paho-mqtt's Issues

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 !?

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

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

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.

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

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

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

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

MQTT 组件 IAR 上编译报错

paho_mqtt.h 文件中:

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

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

无法安装包

我使用 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'

[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

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

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

Bug fix: 内存操作错误

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

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

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

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?

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.