我正在使用Eclipse Paho构建基于MQTT的私人消息传递应用程序。我是MQTT的初学者,因此需要了解主题架构的含义。
如果用户A必须向用户B发送消息:
我想知道私人消息中的推荐主题订阅,考虑实施其他功能,例如
请建议实施上述功能的方式(主题,酒吧和子)。例如,在客户端连接到代理之后,它将向主题A / status发送保留消息,其中有效负载为“online”。
答案 0 :(得分:1)
第一件事:
MQTT协议中没有 私人消息 ,它都基于发布订阅数据交换机制,如果 nodeA 想要其他一些人要了解其消息,然后 nodeA 必须公开定义的主题数据,没有任何东西可以限制第二个 nodeB 或 nodeC 也可以获得这些信息, 为什么? 因为耦合架构松散... nodeA 甚至不需要知道如何获取消息
因此节点发布数据可以有0 ...或n个订阅者。
正如我之前所说,Mqtt是一种协议,其中发布数据的节点不需要知道有关订阅该节点的任何节点。
在聊天应用程序正好相反,PartnerA与PartnerB聊天意味着PartnerA需要知道如何使用msgs的最终(也许是唯一)目的地...... Mqtt没有为此定义
答案 1 :(得分:1)
我不会用MQTT做这个,但如果必须的话,我会使用访问控制列表。 Mosquitto(可能还有其他代理)允许用户发布但不能订阅主题。这使您可以按如下方式有效地创建私人消息基础结构。
客户端A和B有权发布到主题clientc但不订阅它。 (写但不是读/写访问)
客户端C有权订阅clientc。 (阅读权限)
如果客户端A向clientc发布消息,则客户端C接收消息,但客户端B不接收消息。当然,反之亦然。
这种方法存在重大缺陷(它假设所有客户端同时在线,等等)但它是一种可以使用标准MQTT代理的私有消息传递结构。然后可以在此基础上实现其余功能。此外,您可以通过PGP加密消息进一步加强它。