Paho MQTT 异步 C 客户端缓冲区是否接收消息?

问题描述 投票:0回答:2

我一直在阅读 Paho 异步 MQTT 库的文档 https://eclipse.github.io/paho.mqtt.c/MQTTAsync/html/index.html 我不太清楚是否也阻塞定义的 MQTTAsync_messageArrived 回调中的 long 将导致消息丢失或在另一个线程上缓冲。

此页面上的所有内容(https://eclipse.github.io/paho.mqtt.c/MQTTAsync/html/async.html)是“握手和维护网络连接的处理在后台执行” ”。这听起来像是能够维持与代理的连接,但尚不清楚这是否还包括主题的接收。

我看到 MQTTAsync_createOptions 中有一个用于最大缓冲消息的值,但据我所知,这是用于发布消息而不是接收消息的缓冲区。还是两者兼而有之?

我是否可以安全地阻止此消息到达回调,或者我是否需要在自己的线程上使用某种生产者/消费队列,以便不会错过任何消息?

c paho
2个回答
1
投票

您永远不应该在

messageArrived
回调中运行阻塞长时间运行的任务。如果您有长时间运行的任务,您应该将它们交给单独的线程


0
投票

该库包含一个线程,用于从套接字读取传入数据包,并从该线程调用

messageArrived()
。因此,如果您阻止该线程,则会阻止所有输入处理。所以不要长时间阻塞该线程。

如果您想缓冲传入消息,最好将它们写入线程安全队列,以便在时间允许时由应用程序使用。

你的怀疑是正确的。

maxBufferedMessages
用于出站(发布)流量。它允许您的应用程序在与代理断开连接时“发布”消息。这些将保存在 FIFO 中,并在重新建立连接时按顺序自动发送。

文档对此的评论不够清楚。可以更新一下。

© www.soinside.com 2019 - 2024. All rights reserved.