如何在MQTT中实现一对一通信?

时间:2016-07-30 22:53:16

标签: protocols mqtt iot

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

这些客户端属于不同类型,可能具有不同的功能。一些客户端类型具有信息 - 如温度 - 正在发布但同时需要设置的功能状态 - 如交换机 - 可以由其他客户端设置。

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

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

    客户/组/设备/温度

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

    客户/组/装置/开关

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

1 个答案:

答案 0 :(得分:2)

你的解决方案很好。例如,客户A可以使用主题B发布到客户customer/group/B/switch,然后客户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。提供的链接仅用于教育目的,他们的教程很棒。