MQTT中推荐的私有消息传递主题结构是什么?

时间:2017-06-28 04:39:14

标签: chat mqtt publish-subscribe messagebroker

我正在使用Eclipse Paho构建基于MQTT的私人消息传递应用程序。我是MQTT的初学者,因此需要了解主题架构的含义。

如果用户A必须向用户B发送消息:

  1. 使用户A订阅主题A,将用户B订阅到主题B.因此,向B发送消息的任何人都必须在主题B中发布(有效负载包含发件人详细信息)
  2. 让用户A订阅A /#,B订阅B /#。因此B向A发送消息将发布到主题A / B
  3. 我想知道私人消息中的推荐主题订阅,考虑实施其他功能,例如

    1. 上次见到
    2. 在线
    3. 递送
    4. 请建议实施上述功能的方式(主题,酒吧和子)。例如,在客户端连接到代理之后,它将向主题A / status发送保留消息,其中有效负载为“online”。

2 个答案:

答案 0 :(得分:1)

第一件事:

MQTT协议中没有 私人消息 ,它都基于发布订阅数据交换机制,如果 nodeA 想要其他一些人要了解其消息,然后 nodeA 必须公开定义的主题数据,没有任何东西可以限制第二个 nodeB nodeC 也可以获得这些信息, 为什么? 因为耦合架构松散... nodeA 甚至不需要知道如何获取消息

因此节点发布数据可以有0 ...或n个订阅者。

enter image description here

正如我之前所说,Mqtt是一种协议,其中发布数据的节点不需要知道有关订阅该节点的任何节点。

在聊天应用程序正好相反,PartnerA与PartnerB聊天意味着PartnerA需要知道如何使用msgs的最终(也许是唯一)目的地...... Mqtt没有为此定义

答案 1 :(得分:1)

我不会用MQTT做这个,但如果必须的话,我会使用访问控制列表。 Mosquitto(可能还有其他代理)允许用户发布但不能订阅主题。这使您可以按如下方式有效地创建私人消息基础结构。

客户端A和B有权发布到主题clientc但不订阅它。 (写但不是读/写访问)

客户端C有权订阅clientc。 (阅读权限)

如果客户端A向clientc发布消息,则客户端C接收消息,但客户端B不接收消息。当然,反之亦然。

这种方法存在重大缺陷(它假设所有客户端同时在线,等等)但它是一种可以使用标准MQTT代理的私有消息传递结构。然后可以在此基础上实现其余功能。此外,您可以通过PGP加密消息进一步加强它。