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


18

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

无需配置主题,对其进行发布就足够了。

这里

客户可以在发布主题后订阅自己的主题吗?我在规格书中找不到任何限制。它也没有被列为可能的异常行为:

5.4.8检测异常行为

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

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

基于此,我认为这肯定是可能的。因此,我对该功能的用例有兴趣吗?

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

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

Answers:


19

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

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

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

一个可能的用例(我假设)是,假设是否有三个客户端(x,y,z)订阅x-topic了由创建的主题x。每当在上发布消息时x-topic,订阅该主题的每个人都会收到该消息。如果y将消息发布到某个主题x-topic(我想可以做到),x即使创建了该主题也没有订阅该主题,那么它将不会收到消息。

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

但是可以通过使用代理作为媒介来控制该机制。


是的,这个选择让我无所适从。只是,我不确定新客户是否可以发布到其他发布者已经使用的现有主题。
Bence Kaulics,2013年

是的,新客户可以发布到现有主题。请记住,客户不会直接交流,每个发布和订阅都是通过代理进行的。
bravokeyl

0

是。

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

没有像创建主题这样的事情。它们用作消息的标题。因此,如果您的客户已订阅某个主题,并且该主题发布了有关该主题的内容,那么该消息将通过代理再次发送给客户。

优秀代理的示例包括用于在设备上运行的Mosquitto和用于基于云的代理的CloudMqtt


4
实际上,这并没有真正超出一年前已经提供的其他答案的范围。您可以自由添加新答案,甚至可以回答已回答的问题。但是,这些答案应提供对问题或解决方案的其他或更新的见解。
Helmar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.