如何在MQTT代理MOSQUITO中显示已交付和已读取的收据?

如何在MQTT代理MOSQUITO中显示已交付和已读取的收据?,mqtt,publish-subscribe,mosquitto,messagebroker,Mqtt,Publish Subscribe,Mosquitto,Messagebroker,我希望在我的消息平台中向用户显示已送达和已阅读的收据。我使用Eclipse的Paho库,Mosquitto作为代理。因为Mosquitto不存储消息,所以哪种方法/插件是最好的 显示已送达收据-如何使用QoS2确认收据来执行此操作 显示阅读收据-向我建议执行此操作的方法 如何存储消息,以便用户可以查看其聊天历史记录?mysql中的任何架构见解都将非常有用 以下是对您的问题的快速回答: 高QOS(1/2)不是端到端交付确认,它只是代理和客户端之间的确认。e、 g.在QOS 2下发布的发布者仅在发布

我希望在我的消息平台中向用户显示已送达和已阅读的收据。我使用Eclipse的Paho库,Mosquitto作为代理。因为Mosquitto不存储消息,所以哪种方法/插件是最好的

  • 显示已送达收据-如何使用QoS2确认收据来执行此操作
  • 显示阅读收据-向我建议执行此操作的方法
  • 如何存储消息,以便用户可以查看其聊天历史记录?mysql中的任何架构见解都将非常有用

  • 以下是对您的问题的快速回答:

  • 高QOS(1/2)不是端到端交付确认,它只是代理和客户端之间的确认。e、 g.在QOS 2下发布的发布者仅在发布者和代理之间进行确认,而不是向订阅者(订阅者可能以不同的QOS订阅)进行确认。唯一的方法是从接收端向发送方发送一条单独的消息。此外,任何给定主题都可能有多个订阅者,因此您必须考虑这将如何工作

  • 同样,唯一的方法是在读取消息时发送单独的消息

  • 你必须自己实现这一点。唯一有帮助的是一些内置的支持,比如hivemq,它支持在某些代理中存在的数据库中存储消息(这不是规范的一部分,因此完全有利于实现)


  • 以下是对您的问题的快速回答:

  • 高QOS(1/2)不是端到端交付确认,它只是代理和客户端之间的确认。e、 g.在QOS 2下发布的发布者仅在发布者和代理之间进行确认,而不是向订阅者(订阅者可能以不同的QOS订阅)进行确认。唯一的方法是从接收端向发送方发送一条单独的消息。此外,任何给定主题都可能有多个订阅者,因此您必须考虑这将如何工作

  • 同样,唯一的方法是在读取消息时发送单独的消息

  • 你必须自己实现这一点。唯一有帮助的是一些内置的支持,比如hivemq,它支持在某些代理中存在的数据库中存储消息(这不是规范的一部分,因此完全有利于实现)


  • Hardlib的答案是100%符合目标的,但我将补充一些关于实现的想法

    我认为MQTT的一个常见误解是它实际上是一个M2M(机器对机器)协议,而不是一个用于在用户之间交换消息的系统。这并不是说您不能将其用于消息传递(facebook做到了),而是说它存在于MQTT之上的一个层中。换句话说,MQTT被设计为在机器之间路由消息,而不关心这些消息的内容。这意味着用户级的细节(传递确认等)并不是它的一部分,而是在MQTT之上实现的东西

    下面是关于如何在MQTT之上实现您的建议的一些想法:

    考虑这样一种情况:您有两个客户机(X&Z),它们都可以访问同一个代理(Y)。要让客户机X确认它已从客户机Z接收到消息,只需让客户机X向客户机Z订阅的主题(比如确认/Z)发送消息即可。这对于用Python或任何编写应用程序的工具实现来说都是微不足道的。(例如,我使用这个基本过程来衡量我的经纪人的往返时间。)

    然而,考虑到QoS可以保证代理已经接收到消息(并且可以为其他客户端保留或以其他方式保留消息),我会质疑这是否真的有必要,除非客户端Z确切地知道客户端X何时接收消息是至关重要的


    根据您的需要,可以通过多种方式提供主题的历史记录。有关MySQL的详细信息,请参见答案和。但是,如果您只需要一个聊天的本地历史记录或关于几个主题的活动记录,考虑简单地将带有时间戳的有效载荷输出到文本文件或JSON。除非处理大量的消息或需要组合复杂的查询,否则MySQL感觉像是过火了

    Hardlib的答案是100%符合目标的,但我将补充一些关于实现的想法

    我认为MQTT的一个常见误解是它实际上是一个M2M(机器对机器)协议,而不是一个用于在用户之间交换消息的系统。这并不是说您不能将其用于消息传递(facebook做到了),而是说它存在于MQTT之上的一个层中。换句话说,MQTT被设计为在机器之间路由消息,而不关心这些消息的内容。这意味着用户级的细节(传递确认等)并不是它的一部分,而是在MQTT之上实现的东西

    下面是关于如何在MQTT之上实现您的建议的一些想法:

    考虑这样一种情况:您有两个客户机(X&Z),它们都可以访问同一个代理(Y)。要让客户机X确认它已从客户机Z接收到消息,只需让客户机X向客户机Z订阅的主题(比如确认/Z)发送消息即可。这对于用Python或任何编写应用程序的工具实现来说都是微不足道的。(例如,我使用这个基本过程来衡量我的经纪人的往返时间。)

    然而,考虑到QoS可以保证代理已经接收到消息(并且可以为其他客户端保留或以其他方式保留消息),我会质疑这是否真的有必要,除非客户端Z确切地知道客户端X何时接收消息是至关重要的

    根据您的需要,可以通过多种方式提供主题的历史记录。有关MySQL的详细信息,请参见答案和。日分