附录B 强制性规范声明(非规范)

    [MQTT-4.3.2-1] 对于QoS 1的分发协议,发送者

    • 每次发送新的应用消息都必须分配一个未使用的报文标识符。
    • MUST send a PUBLISH Packet containing this Packet Identifier with QoS=1, DUP=0.
    • 发送的PUBLISH报文必须包含报文标识符且QoS等于1,DUP等于0。
    • 必须将这个PUBLISH报文看作是 未确认的 ,直到从接收者那收到对应的PUBACK报文。4.4节有一个关于未确认消息的讨论。

    [MQTT-4.3.2-2] 对于QoS 1的分发协议,接收者

    • 响应的PUBACK报文必须包含一个报文标识符,这个标识符来自接收到的、已经接受所有权的PUBLISH报文。

    [MQTT-4.3.3-1] 对于QoS 2的分发协议,发送者

    • 必须给要发送的新应用消息分配一个未使用的报文标识符。
      • MUST send a PUBLISH packet containing this Packet Identifier with QoS=2, DUP=0.
    • 发送的PUBLISH报文必须包含报文标识符且报文的QoS等于2,,DUP等于0。
      • 必须将这个PUBLISH报文看作是 未确认的 ,直到从接收者那收到对应的PUBREC报文。4.4节有一个关于未确认消息的讨论。
      • 收到PUBREC报文后必须发送一个PUBREL报文。PUBREL报文必须包含与原始PUBLISH报文相同的报文标识符。
      • 必须将这个PUBREL报文看作是 未确认的 ,直到从接收者那收到对应的PUBCOMP报文。
      • 一旦发送了对应的PUBREL报文就不能重发这个PUBLISH报文。

    [MQTT-4.3.3-2] 对于QoS 2的分发协议,接收者

    • 响应的PUBREC报文必须包含报文标识符,这个标识符来自接收到的、已经接受所有权的PUBLISH报文。
    • 在收到对应的PUBREL报文之前,接收者必须发送PUBREC报文确认任何后续的具有相同标识符的PUBLISH报文。 在这种情况下,它不能重复分发消息给任何后续的接收者。
    • 响应PUBREL报文的PUBCOMP报文必须包含与PUBREL报文相同的标识符。