등록을 처리한 후 서버는 SC_REPLY 메시지를 보냅니다. 서버는 등록 요청을 보낸 클라이언트의 열린 TCP 연결을 통해 이 메시지를 보낸 다음 연결을 닫습니다. 클라이언트는 서버로부터 SC_REPLY 메시지를 받을 때까지 TCP 연결을 열어 두어야 합니다.
서버에 대한 TCP 연결을 엽니다.
연결이 “쓸 수 있는 상태”가 될 때까지 기다립니다.
ADD_CLIENT 메시지를 포함하는 SC_CALLBACK_REG 메시지를 보냅니다
SC_REPLY 메시지를 기다립니다.
SC_REPLY 메시지를 수신합니다.
서버가 연결을 닫았다는 표시를 수신합니다(소켓에서 0바이트를 읽음).
연결을 닫습니다.
서버에 대한 TCP 연결을 엽니다.
연결이 “쓸 수 있는 상태”가 될 때까지 기다립니다.
REMOVE_CLIENT 메시지를 포함하는 SC_CALLBACK_REG 메시지를 보냅니다.
SC_REPLY 메시지를 기다립니다.
SC_REPLY 메시지를 수신합니다.
서버가 연결을 닫았다는 표시를 수신합니다(소켓에서 0바이트를 읽음).
연결을 닫습니다.
서버는 클라이언트로부터 SC_CALLBACK_REG 메시지를 받을 때마다 열려 있는 동일한 연결을 통해 SC_REPLY 메시지를 보냅니다. 이 메시지는 작업의 성공 또는 실패 여부를 지정합니다. SC_REPLY XML DTD 에는 SC_REPLY 메시지의 XML 문서 유형 정의와 이 메시지에 포함될 수 있는 가능한 오류 메시지가 포함되어 있습니다.
SC_REPLY 메시지는 작업에 성공 또는 실패했는지 여부를 지정합니다. 이 메시지는 CRNP 프로토콜 메시지의 버전 및 상태 코드와 상태 코드를 자세하게 설명하는 상태 메시지를 포함합니다. 다음 표에는 가능한 상태 코드 값이 설명되어 있습니다.
상태 코드 |
설명 |
---|---|
OK |
메시지가 성공적으로 처리되었습니다. |
RETRY |
일시적인 오류로 인하여 서버에서 클라이언트 등록을 거부했습니다. 클라이언트는 다른 매개 변수로 다시 등록을 시도해야 합니다. |
LOW_RESOURCE |
클러스터 자원이 부족하므로 클라이언트는 나중에 다시 시도해야 합니다. 클러스터의 시스템 관리자가 클러스터의 자원을 늘릴 수도 있습니다. |
SYSTEM_ERROR |
심각한 문제가 발생했습니다. 시스템 관리자에게 클러스터에 대해 문의하십시오. |
FAIL |
인증에 실패했거나 다른 문제로 인해 등록에 실패했습니다. |
MALFORMED |
XML 요청이 잘못되었거나 구문 분석하지 못했습니다. |
INVALID |
XML 요청이 유효하지 않습니다(XML 사양을 충족하지 않음). |
VERSION_TOO_HIGH |
메시지 버전이 너무 높아 메시지를 성공적으로 처리하지 못했습니다. |
VERSION_TOO_LOW |
메시지의 버전이 너무 낮아 메시지를 성공적으로 처리하지 못했습니다. |
정상적인 상태에서 SC_CALLBACK_REG 메시지를 보내는 클라이언트는 등록이 성공 또는 실패했는지 여부를 나타내는 응답을 받습니다.
그러나 클라이언트를 등록하는 동안 서버에 오류 상태가 발생하여 서버에서 SC_REPLY 메시지를 클라이언트에 보내지 못할 수 있습니다. 이러한 경우 등록은 오류 상태가 발생하기 전에 성공했거나, 실패했거나, 아직 처리되지 않았을 수 있습니다.
서버는 클러스터에서 페일오버 또는 고가용성 서버로 작동해야 하므로 이 오류 상태로 인해 서비스가 종료되는 것은 아닙니다. 실제로 서버는 새로 등록된 클라이언트에 대한 이벤트 전송을 곧바로 시작할 수 있습니다.
이러한 문제를 해결하려면 클라이언트가 다음 두 가지를 모두 수행해야 합니다.
SC_REPLY 메시지를 기다리는 등록 연결에 대해 응용 프로그램 수준의 시간 초과를 지정합니다. 시간이 초과되면 클라이언트는 등록을 다시 시도해야 합니다.
이벤트 콜백을 등록하기 전에 이벤트 전달을 위한 해당 콜백 IP 주소 및 포트 번호를 수신합니다. 클라이언트는 등록 확인 메시지와 이벤트 전달을 동시에 기다려야 합니다. 클라이언트는 확인 메시지를 받기 전에 이벤트를 받기 시작한 경우 등록 연결을 자동으로 닫아야 합니다.