ACE+TAO 開源程式設計筆記/處理 IOR
如前所述,直接使用 IOR 字串來連線客戶端和伺服器並不是首選方法,無法讓雙方進行通訊。在生產環境中,通常使用命名服務。它既可以用來發布服務的地址,又可以用來保持服務的有效 IOR 不變。如果您多次執行之前的伺服器示例,您可能會注意到 IOR 字串往往會發生變化。使用這種方法,您可以確保一致性和可讀性。
CORBA 程式用來執行地址註冊和查詢的底層基礎設施是命名服務。對於 TAO,命名服務是用幾個命令列引數啟動的。在下面的示例中,引數 "-ORBEndPoint" 用於定義服務監聽的位置,引數 "-ORBDaemon" 用於強制守護程序真正像守護程序一樣執行。奇怪的是,您使用 TAO 編譯的所有服務(守護程序)實際上都不會像守護程序一樣執行,除非您使用此可選引數。
端點對於執行任何 TAO 服務或已編譯的客戶端/伺服器應用程式至關重要。如果您不提供端點,預設端點是多播端點。此預設端點被描述為對效能不是問題或用於測試的應用程式很有用。話雖如此,這位作者無法在標準 Linux FC4 系統上使多播 IIOP 端點工作,即使 Linux 系統保證多播正在執行。我能夠透過在 ACE 框架測試目錄下執行多播測試應用程式來驗證此錯誤。為了確保任何閱讀本文的人都能啟動並執行,我們將設定一個具有顯式定義的端點 "localhost" 的客戶端。
此端點有兩種基本形式,一種是服務釋出其服務,另一種是客戶端嘗試查詢服務。為了使討論更直觀,我們將假設在每個示例中,命名服務伺服器都在執行,並且可以從您的測試機器訪問。要啟動命名服務,請嘗試以下操作
Naming_Service -ORBEndPoint iiop://:12345 -ORBDaemon
這將在 localhost 介面的埠 12345 上設定您的命名服務。要測試其是否已啟動並執行,請嘗試以下操作
nslist -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService
這將生成以下輸出
Naming Service: ---------
這表明您的命名服務已啟動並執行,但尚未報告任何服務。要檢視服務的示例,請嘗試使用以下命令啟動事件服務(我們將在後面的示例中使用它)
CosEvent_Service -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService -ORBDaemon
現在,當您再次執行 nslist 時,您將看到以下輸出
Naming Service: --------- CosEventService: object reference: Protocol: IIOP, Endpoint: 10.0.0.53:32802
最後,我們有一組正常工作的伺服器,它們透過 IIOP 端點連線在一起。當您將客戶端和伺服器連線在一起時,您將使用相同的過程... 啟動命名伺服器,可能啟動事件服務(或其他服務),然後啟動客戶端和伺服器。對於 Linux,與 ACE+TAO 專案相關的開發人員提供了包含指令碼檔案的 RPM 軟體包,這些指令碼檔案旨在與 Linux 的引導設施互動,這些設施將自動啟動命名服務(和其他服務)。