我正在尝试为连接许多客户端的项目设置MQTT系统。
这些客户端属于不同类型,可能具有不同的功能。一些客户端类型具有信息 - 如温度 - 正在发布但同时需要设置的功能状态 - 如交换机 - 可以由其他客户端设置。
所以使用MQTT我提出了以下概念:
客户发布信息 - 在上面的示例中,这将是温度,如:
客户/组/设备/温度
当客户端连接到代理时,为了从不同的客户端接收交换机的状态,它订阅:
客户/组/装置/开关
到目前为止,我一直在使用基于websocket的解决方案,但由于MQTT是物联网设备的着名协议,我问自己如何在客户端之间实现一对一的通信,并想出了我将如何做到这一点的上述示例。
答案 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。提供的链接仅用于教育目的,他们的教程很棒。