如何确定MQTT客户端的用户ID?

sbh*_*tla 6 mqtt

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

虽然一个明显的方法是简单地在发布消息中附加客户端ID,但我想知道是否有一种方法可以获取客户端ID而无需将其明确添加到消息中.

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

And*_*per 12

如果没有将客户端的名称放在主题中,或者在消息正文中,则无法执行此操作.这是一个简单的发布和订阅系统,原则是发布者和订阅者不需要彼此了解 - 实际上发布者不应该假设有任何订阅者,这是完全可能的情况.

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


Mat*_*tt. 11

我不相信你可以告诉谁在没有看日志的情况下发送了消息.

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

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

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

我使用的另一种方法是在有效载荷中使用json

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