MQTT 客户端可以订阅自己创建的主题吗?

物联网 MQTT
2021-06-27 22:56:51

据我了解,在 MQTT 中,一旦客户端发布具有相应主题名称的内容,就会创建一个主题。

不需要配置topic,在上面发布就足够了。

这里开始

客户端可以订阅自己的主题,在发布、创建它之后吗?我在规范中找不到任何关于它的限制它也没有被列为可能的异常行为:

5.4.8 异常行为检测

服务器实现可能会监视客户端行为以检测潜在的安全事件。例如:

  • 重复连接尝试
  • 重复的身份验证尝试
  • 连接异常终止
  • 主题扫描(尝试发送或订阅多个主题)
  • 发送无法传递的消息(主题没有订阅者)
  • 连接但不发送数据的客户端

基于此,我认为这当然是可能的。所以我对这个功能有哪些用例感兴趣?

为什么标准允许这种机制,跟踪主题的所有者会很复杂吗?因此,它只是简单地允许客户订阅他们自己的主题。

我能想到的一个用例是客户端可以通过这种方式验证其发布的数据。

2个回答

是的,可以订阅自己创建的主题。

MQTT 客户端可以同时是发布者和订阅者。在 MQTT 术语中,客户端包括subscriberspublishers

我对此功能的用例有哪些感兴趣?

一个可能的用例(我假设)是,假设有三个客户端 (x,y,z) 订阅x-topic了由x. 每当在 上发布消息时x-topic,订阅该主题的每个人都会收到该消息。如果y向主题发布消息x-topic(我认为可以完成),如果x即使创建了主题也不订阅该主题,则它不会收到消息。

因此,客户端需要订阅一个主题才能接收消息,即使这是该主题的原始创建者。

但是可以通过使用经纪人作为媒介来控制该机制。

是的。

MQTT 客户端连接到代理,代理可以是云或其他设备。

没有像创建主题这样的事情。它们用作消息的标题。因此,如果您的客户订阅了一个主题,并且它在该主题上发布了一些内容,那么消息将再次通过代理接收到客户端。

好的代理的例子是用于在设备上运行的 Mosquitto 和用于基于云的代理的 CloudMqtt