處理註冊之後,伺服器會發送 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 位址與通訊埠編號,然後再註冊事件回呼。 該用戶端應該同時等待註冊確認訊息及事件發送。 如果用戶端在接收到確認訊息之前就開始接收事件,則用戶端應該以靜音方式關閉註冊連接。