gpt4 book ai didi

MQTT:如何知道 puback 用于哪个 msg?

转载 作者:行者123 更新时间:2023-12-05 01:26:16 25 4
gpt4 key购买 nike

我正在尝试设置一个 MQTT 服务器,它将客户端发送的消息保存到本地数据库中。每条消息都有一个“成功接收”标志,当接收客户端为收到的每条消息 (QOS = 1) 返回一个 puback 时,我想翻转该标志。

问题是:

当我发布消息时,服务器会正​​确地从接收客户端接收回 puback。但是,messageId 与来自发布客户端的数据包的不同。我知道这是有意为之。但是我将无法在 DB 中找到正确的消息来翻转标志。如果客户端 A 背对背向客户端 B 发送 2 条 QOS = 1 的消息怎么办?服务器如何区分返回的 2 个 puback?

也许 MQTT 客户端正在做一些神奇的事情来映射我丢失的 messageIds?

我正在使用 mqttjs 和 paho mqttv3 顺便说一句。

最佳答案

QoS 1 或 2 的 MQTT PUBLISH 消息需要消息 ID 作为数据包的一部分。消息 id 用于标识 PUBACK(或 PUBREC/PUBREL/PUBCOMP 用于 QoS 2)所指的消息。这是一个重要的功能,因为您可能同时“发送”多条消息。

您可能忽略的重要一点是客户端彼此完全分离。这意味着消息 ID 对客户端是唯一的(以及消息流的方向、代理到客户端或客户端到代理)。代理为来自代理的消息生成消息 ID,客户端为来自客户端的消息生成消息 ID;每个方向的消息 ID 都是独立的,因此代理和客户端无需跟踪对方正在做什么。

如果您想跟踪哪些传入消息已发送到所有订阅客户端,则需要跟踪哪些传出消息与传入消息相关,并且仅在收到这些传出消息的所有 PUBACK 后才触发您的数据库.这将告诉您哪些消息已成功发送到在接收消息时订阅的所有客户端。

如果您只想要已发送到代理的所有消息的日志,并且可以假设发送工作正常,那么生活就容易多了。只需在代理主机上创建一个监听“#”主题或您感兴趣的任何内容的客户端,然后使用客户端 on_message() 回调(或您的库管理它的方式)来处理消息并将其存储在数据库中.

关于MQTT:如何知道 puback 用于哪个 msg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037302/

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