登録要求を受信したサーバーは、登録を処理したあと、クライアントが開いた TCP 接続上で SC_REPLY メッセージを送信します。このあとサーバーは接続を閉じます。クライアントは、サーバーから SC_REPLY メッセージを受信するまで TCP 接続をオープン状態に保つ必要があります。
クライアントは次のような作業を行います。
サーバーに対して TCP 接続を開きます。
接続が「writable (書き込み可能)」になるまで待機します。
SC_CALLBACK_REG メッセージ (このメッセージには ADD_CLIENT メッセージが入っている) を送信します。
サーバーから SC_REPLY メッセージが到着するのを待機します。
サーバーから SC_REPLY メッセージを受け取ります。
サーバーが接続を閉じたことを示すインジケータを受信します (ソケットから 0 バイトを読み取る)。
接続を閉じます。
その後クライアントは以下の作業を行います。
サーバーに対して TCP 接続を開きます。
接続が「writable (書き込み可能)」になるまで待機します。
SC_CALLBACK_REG メッセージ (このメッセージには REMOVE_CLIENT メッセージが入っている) を送信します。
サーバーから SC_REPLY メッセージが到着するのを待機します。
サーバーから SC_REPLY メッセージを受け取ります。
サーバーが接続を閉じたことを示すインジケータを受信します (ソケットから 0 バイトを読み取る)。
接続を閉じます。
クライアントから SC_CALLBACK_REG メッセージを受け取るたびに、サーバーは同じ接続に SC_REPLY メッセージを送信します。このメッセージは、処理が正常に完了したか失敗したかを示すものです。SC_REPLY メッセージの XML ドキュメントタイプ定義とこのメッセージ内で示されるエラーメッセージについては、「SC_REPLY XML DTD」を参照してください。
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 アドレスとポート番号で待機を開始します。クライアントは、登録確認メッセージとイベント配信を同時に待機することになります。確認メッセージを受信する前にイベントを受信し始めた場合は、クライアントはそのまま登録接続を閉じる必要があります。