【问题标题】:How to implement one-to-one communication in MQTT?如何在 MQTT 中实现一对一通信?
【发布时间】:2016-12-05 09:00:25
【问题描述】:

我正在尝试为连接多个客户端的项目设置 MQTT 系统。

这些客户端属于不同类型,可能具有不同的功能。某些客户端类型具有正在发布的信息(例如温度),但同时需要设置的功能状态(例如开关)可以由其他客户端设置。

所以使用 MQTT 我想出了以下概念:

  1. 客户端发布它拥有的信息 - 在上面的示例中,这将是温度,例如:

    客户/组/设备/温度

  2. 当客户端连接到代理时,为了从它订阅的不同客户端接收切换状态:

    客户/组/设备/交换机

到目前为止,我一直在使用基于 websocket 的解决方案,但由于 MQTT 是物联网设备的著名协议,我一直在问自己如何实现客户端之间的一对一通信,并想出了上面的示例来说明我将如何做到这一点。

【问题讨论】:

  • MQTT 主题不应该以 / 开头,这只会在树中添加一个空元素,让后面的事情变得更难
  • 您已经在“问题”的标题和正文之间提出并回答了您自己的问题。您期待什么回应?

标签: protocols mqtt iot


【解决方案1】:

您的解决方案还不错。例如,客户端A 可以使用主题customer/group/B/switch 发布到客户端B,然后客户端B 回复customer/group/A/switch

作为替代方案,客户端 A 可以发布到 customer/group/B/switch 并在有效负载中指定它期望回复的主题,例如

{
    "data":"your message",
    "reply-to":"customer/group/A/segretreply-fromB-1345313"
}

(只是 JSON 有效负载的一个示例)。 您可以使用时间戳、MAC 或其他“唯一性”来源来构建回复主题。客户端A 可以订阅不同的回复主题,以便为每个其他客户端维护“独立”频道。

真正的问题是 MQTT 不是一对一的通信,每个客户端都可能订阅# 并接收所有消息。
您的代理中应该有某种授权,以决定客户端是否可以发布/订阅主题。

我建议阅读这篇出色的文章MQTT Security Fundamentals: Authorization。然后您可以设置主题和授权规则以更好地满足您的要求。

我不隶属于 HiveMQ。提供的链接仅用于教育目的,他们的教程很棒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多