MQTT QoS2为什么使用4个数据包?

MQTT QoS2为什么使用4个数据包?,mqtt,packet,qos,Mqtt,Packet,Qos,我认为我们可以使用publish和pubrcv来满足QoS2 客户端->服务器发布数据包 服务器->客户端pubrecv数据包 当服务器接收发布数据包时,保存到db,然后服务器发布到其他客户端,例如ClientB。 即使我们从ClientA接收到两个相同的发布数据包,服务器也会检查数据库,并知道这是重复的消息,所以不要发布到ClientB 所以我认为不需要4包 我的逻辑正确吗 There协议使用两次数据包交换,以提供QoS 2消息的一次语义 C --- PUBLISH --> S *1 C

我认为我们可以使用publish和pubrcv来满足QoS2

  • 客户端->服务器发布数据包
  • 服务器->客户端pubrecv数据包
  • 当服务器接收发布数据包时,保存到db,然后服务器发布到其他客户端,例如ClientB。 即使我们从ClientA接收到两个相同的发布数据包,服务器也会检查数据库,并知道这是重复的消息,所以不要发布到ClientB

    所以我认为不需要4包


    我的逻辑正确吗

    There协议使用两次数据包交换,以提供QoS 2消息的一次语义

    C --- PUBLISH --> S
    *1
    C <-- PUBREC  --- S
    *2
    C --- PUBREL  --> S
    *3
    C <-- PUBCOMP --- S
    *4
    
    C---发布-->S
    *1
    CS
    *3
    
    CThere协议使用两次数据包交换,以提供QoS 2消息的一次语义

    C --- PUBLISH --> S
    *1
    C <-- PUBREC  --- S
    *2
    C --- PUBREL  --> S
    *3
    C <-- PUBCOMP --- S
    *4
    
    C---发布-->S
    *1
    CS
    *3
    
    C我猜它使用4个数据包来避免发送方重新发送初始数据包,而不仅仅是为了避免在接收方处理它。我猜它使用4个数据包来避免发送方重新发送初始数据包,而不仅仅是为了避免在接收方处理它。我明白了。MQTT是定义不使用数据库,所有数据都在内存中,因此需要4个数据包,如果使用数据库存储消息,可以使用2个数据包。使用数据库与否无关。您的方案建议代理必须永久存储所有消息,以避免重复。因为我想用MQTT创建我的IM服务,所以需要保存所有的消息。MQTT非常有用,我知道了。MQTT是定义不使用数据库,所有数据都在内存中,因此需要4个数据包,如果使用数据库存储消息,可以使用2个数据包。使用数据库与否无关。您的方案建议代理必须永久存储所有消息,以避免重复。因为我想用MQTT创建我的IM服务,所以需要保存所有的消息。MQTT非常有用。