mqtt支持一对多和多对一吗?

mqtt支持一对多和多对一吗?,mqtt,Mqtt,最近我读了一篇物联网的文章 在这篇文章中,他说,通过mqtt协议,客户机可以以一对多和多对一的方式进行通信。在mqtt规范本身中提到了一对多,但我对多对一没有什么混淆。我所了解的是,许多客户端都在发布同一主题,而这些不同的发布者只有一个订阅者。那么订阅者(用户)应该如何识别消息属于哪个发布者? 另一个疑问是,如果两个发布者使用相同的主题发布他们的数据,而彼此都不知道,因为每个客户端都连接到internet,订阅者将同时获得这两个数据。但这并不是订阅者所期望的。他只想从一个发布者那里获得数据。在m

最近我读了一篇物联网的文章 在这篇文章中,他说,通过mqtt协议,客户机可以以一对多和多对一的方式进行通信。在mqtt规范本身中提到了一对多,但我对多对一没有什么混淆。我所了解的是,许多客户端都在发布同一主题,而这些不同的发布者只有一个订阅者。那么订阅者(用户)应该如何识别消息属于哪个发布者?
另一个疑问是,如果两个发布者使用相同的主题发布他们的数据,而彼此都不知道,因为每个客户端都连接到internet,订阅者将同时获得这两个数据。但这并不是订阅者所期望的。他只想从一个发布者那里获得数据。在mqtt通信中是否有可能出现相同的情况?

以下是有关mqtt的一些事实,可能会帮助您理解

  • 出版商不“拥有”主题。出版商可以选择 将消息发布到任何主题(假设它是有效的MQTT主题)


  • 鉴于上述第1点,任何数量的发布者可同时 发布到同一主题

  • 客户可以选择订阅 接收从中发布的信息的特定主题或通配符主题 任何出版商
  • 客户端既可以是发布服务器,也可以是订阅服务器 (客户甚至可以收到自己发布的 信息)
  • MQTT代理负责管理所有 客户之间的关系。客户不知道(或不关心)哪一个 其他客户端当前已连接到代理。出版商和 订阅者是完全解耦的,尽管他们可以通信 使用MQTT功能(发布/订阅)
  • 有可能 发布者的消息被丢弃,因为没有订阅服务器 目前对该消息感兴趣。(例如:出版商发布到 主题“topic1”。如果之前没有订阅者请求 订阅“topic1”,MQTT将丢弃该消息 代理,因为它没有要发送给的客户端)
  • 单一出版商 可以一次发布到多个客户端。(例如:10位客户前来 联机并请求订阅主题“topic1”。另一个客户端 在线并发布到“topic1”。所有10个订户 “topic1”将接收消息。发布者只需将一条消息发布到MQTT代理,MQTT代理负责将消息中继到所有10个订阅者)
  • 希望这些花絮信息能帮助您理解,如果我还有什么不清楚的地方,请告诉我。

    “有可能因为当前没有订阅者对该消息感兴趣而放弃发布者的消息。(例如:发布者发布到主题“topic1“。如果以前没有订阅者请求订阅“topic1”,则MQTT代理将丢弃该消息,因为它没有要将其发送到的客户端)”
    即使设置了retain flag发布也适用吗?因为我知道,如果设置了retain flag,则代理将存储该特定主题的会话,并且每当订阅者可以访问该主题时,代理都会将这些消息移交给订阅的客户端。

    “鉴于上述第1点,任何数量的发布者都可以同时发布到同一主题。“这意味着什么?”因此,如果两个客户端发布到同一主题,例如:“topic1”(假设这两个客户端不使用主题层次结构,而只使用“topic1”)。另一个客户端正在订阅“topic1”,则他将同时收到这两个值。但他如何区分两个出版商客户的值呢?另外,如果订阅服务器客户端只对一个发布服务器客户端感兴趣,那么他如何阻止其他发布服务器的值呢?我建议阅读发布/订阅模式:。为了明确回答您的问题,由于您拥有自己的主题体系结构,您可以轻松地设计系统,让发布者发布自己的主题。请记住,发布/订阅模式努力保持发布者和订阅者之间的松散耦合。如果您的订阅者需要知道哪个发布者正在发送特定的消息,您可能没有正确地设计您的系统。我可能能够澄清——考虑定义光状态的照明控制消息,例如色调灯泡。您可以让topics/house/hue//state包含各种buibs的状态信息,如果消息包含发布者id,那么如果是照明控制器,则它是关于,其他任何东西都代表了一个可能的请求——灯光控件和客户端都发布和订阅同一组URL,并使用发布者信息进一步过滤部分正确的数据。MQTT代理将只保留在给定主题上发布的最后一条消息(如果QoS值为0,则允许随时丢弃该消息)。为了给你一个有用的例子,让我们来看看股票市场的应用。每当有新的数据可用时,出版商就会发布市场数据(主题:谷歌,有效载荷:650.50美元)。设置了retain标志后,订阅者将收到可用的最新数据,而不必等到发布者发布消息才知道谷歌股票的价格。