【问题标题】:How do I determine user ID of MQTT clients?如何确定 MQTT 客户端的用户 ID?
【发布时间】:2014-08-19 19:47:19
【问题描述】:

目前我有一个 MQTT 系统,其中一个客户端发布,一个订阅。现在我想要一个许多客户发布的系统。订阅者必须了解哪个客户端正在发送信息。

虽然一种明显的方法是在发布消息中简单地附加一个客户端 ID,但我想知道是否有一种方法可以在不显式将其添加到消息中的情况下获取客户端 ID。

详细来说,假设主题是“/hello/world”,客户端 1 发布“OK”,客户端 2 发布“ERR”。有没有办法确定哪个客户端发送了什么消息?

【问题讨论】:

    标签: mqtt


    【解决方案1】:

    我不相信你不看日志就知道是谁发送了消息。

    我过去克服这个问题的方法是在主题中发布带有客户端 ID 的消息; (client_id 可以是主题中的任何位置)

    /hello/clientid1/world ok /hello/clientid2/world err /hello/clientid3/world warning

    然后像这样订阅主题; /hello/+/world 然后在您的代码中转换主题名称以获取消息和客户端 ID。

    我使用的另一种方法是在payload中使用json,例如

    /hello/world {"msg":"err", "client":"clientid1"}

    【讨论】:

      【解决方案2】:

      如果不将客户端名称放在主题中或消息正文中,就无法做到这一点。这是一个简单的发布和订阅系统,其原则是发布者和订阅者不需要相互了解——事实上发布者根本不应该假设有订阅者,这是一个完全可能的场景。

      因此,如果您确实需要这样做,则需要以某种方式将客户端 ID 放在主题名称中,或者将其包含在已发布消息数据的正文中。

      【讨论】:

        猜你喜欢
        • 2021-07-13
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多