gpt4 book ai didi

mqtt - 如何查找已连接的 MQTT 客户端详细信息

转载 作者:行者123 更新时间:2023-12-03 21:16:57 26 4
gpt4 key购买 nike

有什么方法可以从另一个客户端找到所有连接的客户端详细信息(IP 和名称)?我知道有一个主题“$SYS/broker/clients/active”给出了当前连接的客户端的数量,但是如果我想了解更多关于每个连接的客户端的信息,有什么办法吗?

我正在开发一个解决方案,其中客户端数量将(使用无线网络)连接到位于服务器上的 MQTT 代理。我还将在同一台机器上运行另一个客户端并连接到代理,该代理将观察是否有任何新客户端与代理连接或断开连接的客户端。当新客户端连接或连接的客户端断开连接时,我可以在代理控制台上看到消息。我们可以从连接到代理的客户端获得类似的东西吗?请建议实现这一目标的最佳方法是什么?

提前致谢。

-迪利普

最佳答案

您最初的问题以及对后续问题的回答都无法确定您正在使用哪个代理实现。因此,您的问题可能会有更有效的答案。

如果没有这些信息,让我们专注于您可以在协议(protocol)本身中执行的操作。

MQTT 支持 RETAINED 消息。这是代理将针对每个主题存储最新保留消息的地方。当客户端订阅主题时,它将收到保留的消息(如果存在)。

还有最后遗嘱和遗嘱 (LWT) 功能(goetzchr 所指),可用于在客户端异常断开连接时代表客户端发布消息。

结合这两个功能,您可以在代理上构建一个简单的在线服务,所有这些都在协议(protocol)内。它是这样工作的:

  • 当客户端连接时,它会向其独有的主题发布一条 RETAINED 消息,例如:
    clients/my_client_id/state
    有效载荷为 1 . (用客户自己的 ID 替换 my_client_id
  • 它还在连接时设置要发布到同一主题的 LWT 消息,但有效负载为 0 .这也应该是一条 RETAINED 消息。
  • 当客户端完全断开连接时,它会向同一主题发布一条 RETAINED 消息,其有效负载为 0

  • 这允许另一个客户订阅 clients/#接收所有指示客户端连接状态变化的消息(标识客户端的完整主题,以及指示连接状态的有效负载值)。

    为了获得不仅仅是连接状态的更多信息,客户端可以在连接上发布另一个保留消息到另一个主题,例如 clients/my_client_id/info包含您感兴趣的所有信息。

    这仅在您控制所有连接到您的代理的客户端并且能够让它们表现得像这样时才有效。

    这不是一个理想的方法;希望您的代理实现将提供一些服务器端方法来执行此操作。

    关于mqtt - 如何查找已连接的 MQTT 客户端详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057835/

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