處理註冊後,接收到註冊請求的伺服器會將 SC_REPLY 訊息傳送至用戶端開啟的 TCP 連線。該用戶端將關閉連線。在該用戶端接收到來自伺服器的 SC_REPLY 訊息之前,必須保持 TCP 連接的開啟狀態。
例如,該用戶端執行下列動作:
開啟至伺服器的 TCP 連接
等待連接變得「可寫入」
發送 SC_CALLBACK_REG 訊息 (其中包含 ADD_CLIENT 訊息)
等待伺服器中的 SC_REPLY 訊息
接收伺服器中的 SC_REPLY 訊息
接收表明該伺服器已關閉連接 (從套接字讀取 0 位元組) 的指示器
關閉連接
過一段時間,用戶端將執行以下動作︰
開啟至伺服器的 TCP 連接
等待連接變得「可寫入」
發送 SC_CALLBACK_REG 訊息 (其中包含 REMOVE_CLIENT 訊息)
等待伺服器中的 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 位址與通訊埠編號,然後再註冊事件回呼。該用戶端應該同時等待註冊確認訊息及事件發送。如果用戶端在接收到確認訊息之前就開始接收事件,則用戶端應該以靜音方式關閉註冊連接。