ICE通信簡介


文章來自:CSDN-lihuayong的專欄

參考《Ice分布式程序設計馬維達 譯

一、簡介

    Ice 是一種針對客戶端和服務器進行通信的面向對象的中間件平台。Ice 為構建面向對象的客戶-服務器應用提供了工具、API 和庫支持。客戶和服務器通信雙方可以用不同的編程語言編寫,目前最新的版本支持的語言包括C++.NETJavaPythonObjective-CRubyPHP and ActionScript客戶和服務器可以分別部署可以運行在不同的操作系統和機器架構上

    Ice 核心為遠地通信提供了客戶端和服務器端運行時支持。其中的大量代碼所涉及的是網絡通信、線程、字節序,以及其他許多與網絡有關的問題,我們應用代碼應該與這些問題隔離開來。

    Ice 提供了一種RPC 協議,既可以把TCP/IP、也可以把UDP 用作底層傳輸機制。客戶和服務器代碼都不需要了解底層的傳輸機制(你可以通過一個配置參數選擇所需的傳輸機制)。

    Ice 還允許你把SSL 用作傳輸機制,讓客戶與服務器間的所有通信都進行加密。通過SSL 強加密,可以使客戶和服務器完全安全地進行通信,這樣,應用可以使用不安全的網絡安全地進行通信。

    Ice 提供了同步和異步的操作調用和分派。

   客戶端采用異步方法調用,可以不需要等到服務器做出答復,Ice run time 等待答復的同時,客戶端發出調用的線程不會阻塞。發出調用的線程可以繼續進行各種活動,當答復最終到達時, Ice run time 會通知應用

   服務器可以采用異步方法分配,一個服務器在同一時刻所能支持的同步請求數受到Ice run time 的服務器線程池的尺寸限制。如果所有線程都在忙於分派長時間運行的操作,那么就沒有線程可用於處理客戶端發送過來的新的請求,客戶端就會出現不可接受的無響應狀態

 

   在使用異步方法分配時,服務器可以接收一個請求,然后先將此請求放入任務池中,讓其他的線程處理,以盡快釋放分派線程。當處理結果已得出時,服務器要使用Ice run

time 提供的回調對象,顯式地發送響應到客戶端,告知客戶端請求處理的結果

二、Ice 服務

    Ice 核心為分布式應用開發提供了一個完善的客戶-服務器平台。但現實應用需要的常常不止是遠地通信能力:你通常還需要擁有這樣的能力:隨需啟動服務器、把代理分發給客戶、分發異步事件、配置你的應用、分發應用補丁,等等。

   在Ice 中有一些服務, 能夠提供上述特性及其他一些特性。

1. IcePack

    IcePack Ice 的定位服務,用於在使用間接綁定時把符號性的適配器名解析為協議-地址對。 也就是說應用程序中只需要提供字符串(一個對象的標示符),將此字符串在ICE中注冊就行了,不需要將通信的IP、端口等信息硬編碼在程序代碼中,或者說在配置文件中手動指定IP和端口信息。客戶端和服務器通信時,客戶端就可以使用字符串先到注冊的映射表中查詢出相應的IP和端口等信息,再進行通信。

    1.服務器在啟動時,服務器向定位器注冊它的對象和對象適配器。

    2.在創建使用間接綁定的代理時,客戶端的Ice run time 調用定位器上的方法,獲取與某個對象標識或對象適配器標識符相關聯的端點。

    3.在為代理獲取了端點之后,客戶直接建立一個通向服務器的連接。客戶不會再次詢問定位器,除非發生連接錯誤。

 

    除了這樣的定位服務, IcePack 還提供了其他特性:

  • IcePack  允許你注冊服務器,進行自動啟動:當客戶發出請求時,服務器無需在運行,  IcePack  會在第一個客戶請求到達時,隨需啟動服務器。
  • IcePack  支持部署描述符,能讓你輕松地配置含有若干服務器的復雜應用。
  • IcePack  提供了一種簡單的對象查找服務,客戶可用來獲取它們感興趣的對象的代理。

2. IceBox

    IceBox 是一種簡單的應用服務器,可用於協調許多服務的啟動和停止。一個通用的IceBox 服務器取代了你通常編寫的整體式Ice 服務器。你通過屬性為IceBox 服務配置它負責加載和管理的應用特有的服務,並且可以對它進行遠地管理。

要把自己編寫的服務配置進IceBox 服務器中,只需使用一個屬性。下面是這個屬性的格式:

    IceBox.Service.name=entry_point [args]

    name 部分是服務名entry_point指出服務具體的類路徑,args指出開啟服務是需要的一些參數。

3. IceStorm

    IceStorm 是一種發布-訂閱服務,能夠解除客戶與服務器的耦合。在本質上, IceStorm 充當的是事件分發交換機。發布者把事件發給這個IceStorm服務,由它發給訂閱者。這樣,發布者發布的單個事件就可以發送給多個訂閱者。事件按照主題進行分類,訂閱者會指定它們感興趣的主題。只有那些與訂閱者感興趣的主題相吻合的主題才會發給這個訂閱者。這個服務允許你指定服務質量標准, 讓應用在可靠性和性能之間進行適當的折衷。

    如果你需要把信息分發給大量應用組件, IceStorm 就會特別有用(一個典型的例子是,擁有大量訂閱者的證券報價應用)。IceStorm 能解除信息的發布者與訂閱者的耦合,並負責重新分發已發布的信息。此外,IceStorm還可以作為聯盟服務運行,也就是說,服務的多個實例可以在不同的機器上運行,使處理負載分攤到許多CPU 上。

    應用常常需要把信息分發給多個接收者。例如,假定我們在開發一個氣候監測應用,用於收集來自氣象塔的觀測數據,比如風速和溫度,並把它們周期性地發布給氣候監視站。我們一開始考慮使用圖中的架構。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM