问题标签 [pahocpp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
96 浏览

c++ - paho.mqtt.cpp 只是 paho.mqtt.c 的包装,两者有什么不同?

paho.mqtt.cpp 指的是c 版本,从MQTT 协议的角度来看,这两个实现的特性几乎相同。那么为什么要使用cpp 版本来包装c 版本呢?cpp版比c版在功能、性能等方面有什么优势?有人可以给我答案或提供一些材料吗?我很想知道这两个库的选择。

0 投票
1 回答
952 浏览

c++ - Using Paho MQTT C++ to connect to AdafruitIO

I'm trying to create a TLS connection to AdafruitIO using paho C++. I can connect and interact with it using 1883 non TLS, but when trying to get TLS going on 8883, it fails to connect. I was able to do this in C++ using the mosquitto C++ library, but that's been deprecated, so I'm trying to move my code over. I suspect I'm just not telling the Paho library enough about the lack of certs, but I can't find API's other than below which might do that. Or, can I use a cert or store on a standard RPi image to connect with? The mosquitto library didn't require me to use certs, it just worked dumb. Below is the code which works for 1883, but not 8883. It's a small test app using a callback class to try to mimic better the final design. I get that I'm not really using it correctly here, but mostly, I'm just trying to fix connections so I can publish, then I can go back and clean up the design.

Can I use system cert files somehow? I confess I'm not that familiar with how TLS/SSL works, so I'm not sure how I could use the system to help me solve this problem, if that's possible. Honestly, based on the PAHO debug log, it connects, but fails somewhere on the server side it looks like, though I don't see where or why. Maybe just a rejection without a reason?

Any thoughts on the best way to do this? I plan to run this on an RPi project I'm building, but am testing on Ubuntu 19.04 desktop for now. I use cmake, and C++17 as well. Doubt that makes a difference, but I'll add it.

main.cpp

localmqttcallback.h

localmqttcallback.cpp

Success sees the following

Failure sees this

And a snippet of the MQTT console debug output

0 投票
1 回答
1004 浏览

c++ - Paho C++ 异步客户端回调 vs action_listener vs connected_handler

我试图了解使用 async_client 时 Paho MQTT C++ 库中各种回调机制的用法和行为,特别是:

  • mqtt::回调
  • mqtt::iaction 监听器
  • mqtt::connection_handler

我想要实现的目标:等待成功连接成功订阅主题列表(以单个主题开头)的阻塞初始化方法,以及在连接断开时自动重新连接重新订阅这些主题出去。

'async_subscribe' 示例(https://github.com/eclipse/paho.mqtt.cpp/blob/master/src/samples/async_subscribe.cpp)建议我应该订阅 mqtt::callback::connected 中的主题。但是,它没有显示如何等待订阅成功完成。我的理解是,我不应该在连接的回调中对订阅令牌调用“等待”。如果我设置了一个私有var _subscribeToken 等待,似乎无法保证在等待连接令牌完成后是否已设置,即(伪代码):

在初始化:

如果它不能保证回调已经被调用,那么 connectToken->wait 有什么意义呢?我很可能误解了某些东西,但我想指出正确的方向!

0 投票
2 回答
15031 浏览

c++ - MQTT C++ 客户端

我想在 C++ 中实现一个 MQTT 客户端功能(它需要是线程安全的,并且能够订阅主题并发布,但不需要代​​理功能)。

我正在考虑Eclipse 的Paho MQTT是他们的下载页面。

我在那里发现他们没有 MQTT5.0 支持。

然而,在他们的github 上:有 C++ 包装器,在 1.1 版中声明支持 MQTTv5.0。

然后我发现了这个问题:Mosquitto vs eclipse paho client library,结论是:

将 libmosquitto 与libmosquittopp包装器一起使用

我检查了 libmosquittopp.h:所有功能都被标记为已弃用,所以我认为它现在还不是正确的方法。

为什么不推荐使用 libmosquittopp?因为

包装器是由外部请求产生的,在创建它时没有其他用于 MQTT 的 C++ 解决方案。这在过去几年发生了变化,与真正的 C++ 库或使用纯 C libmosquitto 相比,此包装器没有提供任何好处。

那么,Paho 现在是否被认为是在 C++ 中使用 MQTT 的正确方向?

或者我将只使用 Mosquitto 的纯 C 库?

或者,还有什么(除了从 0 开始写)?

0 投票
0 回答
77 浏览

linux - Paho-MQTT 库安装成功,但找不到 paho-mqtt3c(或任何其他 libary.so)

我是 MQTT 的新手,目前正在执行一项任务。大部分代码是由我的导师提供给我的,并且没有错误,但是,我无法将该程序作为必要的库 (-lpaho-mqtt3c) 我无法找到我需要链接到链接器的库。当我尝试使用以下命令在终端中安装时:

点安装 paho-mqtt

安装成功,但我无法在 /usr/lib 中的任何地方找到库来制作程序。有谁明白我做错了什么?

生成文件:

0 投票
1 回答
35 浏览

mqtt - 订阅会在 MQTT (Paho)​​ 中发生冲突吗?

我有一个关于 Paho 订阅的问题,以及应用程序如何管理不同的主题(允许使用通配符)。我们之所以感兴趣,是因为我们提供了一个层来管理所有这些东西,以简化开发人员的生活,因此如果需要,我们以后可以在后台使用非 MQTT 发布/订阅。

一个例子可能是最好的解释方式。假设我们的程序中有两个独立的模块:

  • get_all_info()短时间订阅主题fleet/vehicle-N/#以获取特定车辆的所有信息N
  • speed_mon()fleet/+/speed,仅对所有车辆的速度感兴趣,在程序期间订阅。

考虑序列(a)

  • speed_mon()订阅fleet/+/speed.
  • get_all_info()订阅fleet/vehicle-17/#并获取信息。
  • get_all_info()取消订阅fleet/vehicle-17/#

第三次操作会影响第一次吗?换句话说,我们还会收到 topic 的消息fleet/vehicle-17/speed吗?

如果取消订阅是对特定订阅的简单撤销,它将仅禁用在第二个要点中创建的订阅。

如果它使用过滤器禁用所有匹配的订阅(在通配符的意义上),它也会影响第一个订阅。


(a)现在忽略这样一个事实,即我们最好在程序期间订阅并且永远不要取消订阅,而只是将消息缓存到本地存储中get_all_info()fleet/#这是一个人为的例子。我们无法控制客户如何使用我们的层。

0 投票
0 回答
25 浏览

c++ - 在 mqtt paho 中使用 CA 证书

我正在编写收集一些硬件输入并将其发送到 MQTT 代理的应用程序。目前,代理仅使用凭据,不使用 SSL,并且一切正常。(程序是用 C++、Linux 编写的。我使用 Paho MQTT 库——通过包含源代码,而不是编译库)但是我需要开发的下一个功能是 TLS 保护的连接。我有一个 pem 格式的 CA 根证书文件。在 MQTT.fx 应用程序中,我将此文件的路径设置为“CA 证书文件”字段,一切正常。但是在代码中,我找不到如何设置这个文件。

我的代码:

MQTTClient_connect 返回 -1- 错误套接字

我哪里错了?