如何在MQTT中实现一对一通信?
How to implement one-to-one communication in MQTT?
我正在尝试为连接许多客户端的项目设置 MQTT 系统。
这些客户端类型不同,可能具有不同的功能。某些客户端类型有正在发布的信息(例如温度),但同时具有需要设置的功能状态(例如开关),可以由其他客户端设置。
所以使用 MQTT 我想出了以下概念:
客户端发布它拥有的信息——在上面的例子中这就是温度,所以像:
customer/group/device/temperature
当客户端连接到代理时,为了从它订阅的不同客户端接收切换状态:
customer/group/device/switch
到目前为止,我一直在使用基于 websocket 的解决方案,但由于 MQTT 是一种著名的物联网设备协议,我问自己如何在客户端之间实现一对一通信,并想出了上面的例子来说明我将如何做那。
你的解决方案还不错。例如,客户端 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 或 "uniqueness" 的其他来源来构建回复主题。客户 A
可以订阅不同的回复主题,以便为彼此的客户维护 "separate" 频道。
真正的问题是 MQTT 不是一对一的 通信,每个客户端都可以潜在地订阅 #
并接收所有消息。
你应该在你的经纪人中有某种授权来决定客户是否可以publish/subscribe到一个主题。
我建议阅读这篇优秀文章 MQTT Security Fundamentals: Authorization。然后您可以设置主题和授权规则以更好地满足您的要求。
我不隶属于 HiveMQ。提供的 link 仅用于教育目的,他们的教程很棒。
我正在尝试为连接许多客户端的项目设置 MQTT 系统。
这些客户端类型不同,可能具有不同的功能。某些客户端类型有正在发布的信息(例如温度),但同时具有需要设置的功能状态(例如开关),可以由其他客户端设置。
所以使用 MQTT 我想出了以下概念:
客户端发布它拥有的信息——在上面的例子中这就是温度,所以像:
customer/group/device/temperature
当客户端连接到代理时,为了从它订阅的不同客户端接收切换状态:
customer/group/device/switch
到目前为止,我一直在使用基于 websocket 的解决方案,但由于 MQTT 是一种著名的物联网设备协议,我问自己如何在客户端之间实现一对一通信,并想出了上面的例子来说明我将如何做那。
你的解决方案还不错。例如,客户端 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 或 "uniqueness" 的其他来源来构建回复主题。客户 A
可以订阅不同的回复主题,以便为彼此的客户维护 "separate" 频道。
真正的问题是 MQTT 不是一对一的 通信,每个客户端都可以潜在地订阅 #
并接收所有消息。
你应该在你的经纪人中有某种授权来决定客户是否可以publish/subscribe到一个主题。
我建议阅读这篇优秀文章 MQTT Security Fundamentals: Authorization。然后您可以设置主题和授权规则以更好地满足您的要求。
我不隶属于 HiveMQ。提供的 link 仅用于教育目的,他们的教程很棒。