gpt4 book ai didi

c - MQTTAsync_onSuccess 和 MQTTAsync_deliveryComplete 回调有什么区别?

转载 作者:行者123 更新时间:2023-11-30 14:39:07 26 4
gpt4 key购买 nike

我正在通过阅读和试验异步 pub 的变体来了解 MQTT(特别是 paho C 库)/sub示例。

MQTTAsync_deliveryComplete 有什么区别您使用 MQTTAsync_setCallbacks() 设置的回调与 MQTTAsync_onSuccess 相比或MQTTAsync_onSuccess5您在 MQTTAsync_responseOptions 中设置的回调您传递给 MQTTAsync_sendMessage() 的结构?

所有这些似乎都是在处理已发布消息的“成功传递”,但是通过阅读示例代码和 doxygen,我无法判断它们是如何相互关联、冲突或补充的。感谢您的指导。

最佳答案

基本上,MQTTAsync_deliveryComplete 和 MQTTAsync_onSuccess 执行相同的操作,它们通过回调通知您有关消息的传递。这两个回调都是在与运行客户端应用程序的线程不同的线程上异步执行的。

(在当前版本的 Paho 客户端的情况下,两个回调甚至使用相同的线程,但这是一个未记录的实现细节。MQTTAsync_deliveryComplete 和 MQTTAsync_onSuccess 使用的这个线程当然不是应用程序线程,否则它不会是异步回调)。

不同之处在于,MQTTAsync_deliveryComplete 回调通过 MQTTAsync_setCallbacks 设置一次,然后每次消息传送时都会通知您。

与此相反,MQTTAsync_onSuccess 会一次通知您您通过 MQTTAsync_sendMessage() 发送的消息。

您甚至可以定义两个回调,当消息传递时,这两个回调都会被调用。

这使您可以灵活地选择最适合您需求的方法。

人工示例

假设您有三个不同的函数,每个函数发送特定类型的消息(例如 sendTemperature()、sendHumidity()、sendAirPressure()),并且在每个函数中您调用 MQTTAsync_sendMessage,并且在每次传送后您想要调用匹配的回调函数,那么您将选择 MQTTAsync_onSuccess。那么您就不需要跟踪 MQTTAsync_token 并将其与您的回调关联起来。

例如,如果您想实现日志记录功能,那么使用 MQTTAsync_deliveryComplete 会更有用,因为每次交付都会调用它。

当然,人们可以想象,人们希望同时拥有带有某些操作的特定版本和用于日志记录的通用版本,因此在这种情况下,可以同时使用这两种变体。

文档

您应该注意,MQTTAsync_deliveryComplete 在其文档中明确指出它考虑了服务质量集。 MQTTAsync_onSuccess 文档中并非如此,但当然并不意味着实现中没有这样做。但如果这很重要,您应该明确检查源代码。

关于c - MQTTAsync_onSuccess 和 MQTTAsync_deliveryComplete 回调有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com