python - 可以在 mqtt broker 中获取所有可能的主题

标签 python c++ mqtt mosquitto paho

我想要一种方法来获取 mqtt 代理中所有可能主题的列表,但我不想使用带有 #+ 的通配符来订阅所有可能的主题.我只想要所有可能的主题。

如果可能并且任何人对此有任何想法,请告诉我。

最佳答案

这取决于经纪人。 MQTT 规范对枚举主题只字未提,因此没有执行此操作的标准机制。某些经纪人可能会提供一种方式。

这没有您想象的那么有意义。 “所有可用主题”实际上意味着“所有可能的主题”。主题不是“可用”或“不可用”。发布者不注册他们发布的主题。发布者可能只发布一次主题就再也不会发布了。发布者可能会在未来发布到一个主题;目前经纪人无法知道可能会使用此主题。

只有三种有意义的方式可以使主题具有持久性:

客户端可以订阅一个主题 - 代理必须跟踪订阅,以便它可以将消息传输到正确的客户端。除非客户端正在使用 session 或 QoS 1 或 2,否则代理可能会在客户端断开连接时忘记此订阅,并因此忘记主题。

客户端可能发布了带有 QoS 1 或 2 或保留标志的消息。在这种情况下,代理会将消息保留一段时间,并且需要记住它被发送到的主题。

代理可以支持访问控制列表(Mosquitto 支持)——这样的代理可以查询哪些主题具有访问控制。

否则,最好将主题视为短暂的。经纪人对他们真的知之甚少。经纪人无法预测 future ,经纪人记住过去的任何事情都是不切实际的,除非是绝对必要的。

如果您的设计需要“所有主题”的知识,您应该重新考虑。

关于python - 可以在 mqtt broker 中获取所有可能的主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73201801/

相关文章:

python - 在 cython 中声明 numpy 数组和 c 指针

Python - 按修改日期 [小时] 分组文件

c++ - C++ 模板的目标代码是否在可执行文件和动态库中重复?

php - 在后台运行 php 脚本,永不死 linux

python - AWS IoT Python SDK 和 asyncio

python - 在 python 中嵌套拆分括号的快速方法是什么?

python - subprocess.call 不等待进程完成

c++ - codecvt_utf8<wchar_t> 被转换为原生 codecvt<wchar_t, char>

c++ - Lua 或 Python 与 C++ 绑定(bind)

python - 如何对挂起的 Paho Python Mqtt Single Publish 进行故障排除