가 프로토콜의 QoS 2 메시징 정확하게 회 의미를 제공하기 위해 두 패킷의 교환을 이용한다.
C --- PUBLISH --> S
*1
C <-- PUBREC --- S
*2
C --- PUBREL --> S
*3
C <-- PUBCOMP --- S
*4
서버는 ID를 저장하고 메시지의 전달합니다 PUBLISH
수신
. 서버가
PUBREL
을 받으면 ID를 삭제할 수 있습니다. 연결이
*1
에 중단하면 서버가 메시지를받은 아닌지
, 클라이언트는 알 수 없습니다. PUBLISH
(전체 메시지 페이로드 포함)을 다시 보냅니다. 서버가 이미 메시지를 수신했다면 PUBREC
으로 응답하면됩니다.
연결이 *2
에서 중단되면 클라이언트에 PUBREC
이 수신되었거나 수신되지 않을 수 있습니다. 그렇지 않은 경우 PUBLISH
을 다시 보내야합니다. 그렇지 않으면 PUBREL
을 전송합니다. 연결이 *3
에 중단하면 서버가 메시지를받은 아닌지
, 클라이언트는 알 수 없습니다. 전체 메시지 페이로드가 포함되지 않은 PUBREL
을 다시 보냅니다.
*4
에서 연결이 끊어지고 클라이언트가 PUBCOMP
을받지 못하면 PUBREL
을 다시 보낼 수 있습니다.
두 교환이 필요한 이유를 두 가지 관측이 있습니다
- 서버가 본적이있는 모든 메시지를 기억할 필요는 없습니다. 메시지 ID를 저장하는 데는 아주 잘 정의 된 기간이 있습니다. 두 교류를 통해 양측은 메시지가 정확히 전달 된 것을 확실하게 알 수 있습니다. 연결이.
*1
에서 중단 네트워크 트래픽을 최소화하기위한 것입니다 프로토콜을 감안하지 않는
- 클라이언트가 여러 번 게시 재전송 할 필요가 없다는 (이것은 중요한 기능입니다.
나는 그것이 4 개 패킷을 사용 추측 보낸 사람이 초기 패킷을 다시 보내지 않도록하고 수신기에서 처리하는 것을 피하는 것만이 아니라. – Hicaro