<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    1       ICE簡介

    1.1    簡介

    ICE(Internet Communications Engine)是一個中間件平臺。作為一個高性能的互聯網通信平臺,ICE包含了很多分層的服務和插件(Plug-ins),并且簡單、高效和強大。

    ICE當前支持C++JavaC#Visual BasicPythonPHP編程語言,并支持在多種操作系統上運行。更多的操作系統和編程語言將會在以后的發布中支持。  

    1.2    組成部分

    ICE有以下幾部分組成:

     

    1.2.1   Slice

    Slice(Specification Language for Ice) ICE的規范語言,跟CORBAIDL(Interface Definition Language)等價的東西,一種用于使對象接口與其實現相分離的基礎性抽象機制。Slice建立了客戶端和服務器端共同遵守的契約:接口。Slice也用來描述對象持久數據。

    Slice描述獨立于實現語言,所以客戶實現語言是否與編寫服務器所用的語言相同沒有任何關系。slice語言片段可以被編譯為任何所支持語言的實現。目前Ice Slice可以支持映射到到C++, Java, C#, Python,Ruby, and PHP。因為Slice主要對接口和類型的定義和描述,沒有實現部分。  

     

    1.2.2   Slice Compilers

    Slice的規范語言可以影射成多種編程語言。目前ICE支持C++JavaPythonPHPC#VB的語言影射。Ice的客戶端和服務器端協同工作,而不會知道分別實現的是何種編程語言。

     

    1.2.3   Ice

    Ice的核心庫。在眾多的特性當中,Ice核心庫通過一個高效的協議(包含TCP/UDP層上協議壓縮)來管理所有的通信任務,為多線程服務器提供了一個靈活的線程池,并且有特別的功能來支持上百萬對象的可擴展性。

     

    1.2.4   IceUtil

    一些常用的功能函數集。例如Unicode處理和多線程編程,是用C++寫成。

     

    1.2.5   IceBox

    一個專用于ICE應用的應用服務器。ICEBox可以方便地運行和管理動態加載、共享庫或java類的形式Ice的服務。

     

    1.2.6   IcePack

    一個成熟的服務激活和部署工具。IcePack能大大簡化在異構網絡之間部署應用的復雜性。只要簡單的編寫XML格式的一個部署描述文件,IcePack就能自動處理剩下的工作。

     

    1.2.7   Freeze

    Freeze提供了Ice Servants對象的自動持久性。通過幾行代碼,一個應用就可以生成一個高度可擴展的逐出器(evictor)來高效地管理持久對象。

     

    1.2.8   FreezeScript

    在大的軟件項目里,持久對象的數據類型改變很常見。為了最小化這些變化的影響,FreezeScript提供了相應的工具來檢查和移植Freeze生成的數據庫。這些工具支持XML格式的配置腳本,易于使用。

     

    1.2.9   IceSSL

    用于Ice核心的動態的SSL傳輸插件。提供了認證、加密和消息完整性,使用工業標準的SSL協議來實現。

     

    1.2.10 Glacier

    面向對象中間件平臺的一個最大的挑戰是安全性和防火墻。GlacierIce的防火墻解決方案,它大大簡化了安全程序的部署。

    Glacier認證和過濾客戶的請求并允許服務器通過安全的方式回調客戶端對象。結合IceSSL的使用,Glacier提供了強大的安全解決方案,即安全,又易于配置管理。

     

    1.2.11 IceStorm

    一個支持聯盟的消息服務。和大多數的其他消息和事件服務相比,IceStorm支持有類型的事件,這意味著通過聯盟廣播一個消息和調用一個接口上的一個方法一樣容易。

     

    1.2.12 IcePatch

    一個軟件修補和分發的服務。為確保運行的軟件是最新的版本,要經常更新軟件,這是一件乏味的工作。IcePatch自動更新在某個目錄層次下的文件。只有需要更新的文件會下作到客戶端,為了快速的下載更新,IcePatch使用的高效的壓縮算法。

     

    2        多語言分布式互聯

    Ice的服務端可以采用C++/Java/Python/C#等實現,客戶端可以采用C++/Java/Python/C#/VB/PHP/Ruby來實現。這個特性是Ice的很重要的優勢之一。

    2.1    概述

    2.1.1   相同的開發環境

     

    2.1.2   不同開發環境

     

    2.2    接口

    建立一個Printer.ice文件

    module Demo {

        interface Printer {

            void printString(string s);

        };

    };

     

    2.3    Java /Java

    服務端采用java實現,客戶端可以采用java實現。

    2.3.1   實現接口

    dos環境下執行 slice2java Printer.ice 命令

    會在當前目錄產生一個Demo目錄,目錄里自動生成如下文件:

    _PrinterDel.java

    _PrinterDelD.java

    _PrinterDelM.java

    _PrinterDisp.java

    _PrinterOperations.java

    _PrinterOperationsNC.java

    Printer.java

    PrinterHolder.java

    PrinterPrx.java

    PrinterPrxHelper.java

    PrinterPrxHolder.java

     

    PrinterI.java

    package slice2java;

     

    import Ice.Current;

    import Demo._PrinterDisp;

     

    /**

     * _PrinterDisp 基類由slice2java編譯器生成,它是一個抽象類。

     * _PrinterDisp 抽象類包含一個printString()方法。

     */

    public class PrinterI extends _PrinterDisp{

        public void printString(String s, Current current)

        {

            System.out.println(s + " ice !");

        }

    }

     

    2.3.2   Server

    Server.java

     

    package server;

     

    import slice2java.PrinterI;

    import Ice.Util;

    import Ice.ObjectAdapter;

    import Ice.Object;

    import Ice.Communicator;

     

    public class Server {

        public static void main(String[] args) {

           int status = 0;

           // 創建一個通信器的對象ic

           Communicator ic = null;

           try {

               // 初始化Ice運行時

               ic = Util.initialize();

               /*

                 * 創建一個對象適配器(ObjectAdapter)對象adapter,并初始化之。

                 * 參數"SimplePrinterAdapter":表示適配器的名字。

                 * 參數"default -p 10000":表示適配器使用缺省協議(TCP/IP)在端口10000處監聽到來的請求。

                 */

               ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

                      "SimplePrinterAdapter""default -p 10000");

               Object object = new PrinterI();

                // object添加到適配器,并命名為"SimplePrinter"

               adapter.add(object, ic.stringToIdentity("SimplePrinter"));

               // 激活適配器,以使服務器開始處理來自客戶的請求

               adapter.activate();

               /*

                 * 掛起發出調用的線程,直到服務器實現終止為止.

                 * 或者是通過發出一個調用關閉運行時(run time)的指令來使服務器終止.

                 */

               ic.waitForShutdown();

           } catch (Ice.LocalException e) {

               e.printStackTrace();

               status = 1;

           } catch (Exception e) {

               System.out.println(e.getMessage());

               status = 1;

           }

           if (ic != null) {

               // Clean up

               //

               try {

                  // 銷毀通信連接

                  ic.destroy();

               } catch (Exception e) {

                  System.out.println(e.getMessage());

                  status = 1;

               }

           }

           System.exit(status);

        }

    }

     

    2.3.3   Client

    Client.java

     

    package client;

     

    import Ice.Util ;

    import Demo.PrinterPrxHelper ;

    import Ice.ObjectPrx ;

    import Demo.PrinterPrx ;

    import Ice.Communicator ;

     

    public class Client {

        public static void main(String[] args) {

           int status = 0;

           Communicator ic = null;

           try {

               ic = Util.initialize();

               /*

                 * 獲取遠程對象的代理

                 * 創建一個代理對象,并用通信器的stringToProxy()方法初始化之.

                 */

               ObjectPrx base = ic

                      .stringToProxy("SimplePrinter:default -p 10000");

               PrinterPrx printer = PrinterPrxHelper.checkedCast(base);

               if (printer == null)

                  throw new Error("Invalid ice");

               printer.printString("Hello ");

           } catch (Ice.LocalException e) {

               e.printStackTrace();

               status = 1;

           } catch (Exception e) {

               System.out.println(e.getMessage());

               status = 1;

           }

           if (ic != null) {

               // Clean up

               //

               try {

                  ic.destroy();

               } catch (Exception e) {

                  System.out.println(e.getMessage());

                  status = 1;

               }

           }

           System.exit(status);

        }

    }

     

    2.4    C++/ C++

    服務端采用C++實現,客戶端可以采用C++實現。

    2.4.1   實現接口

    dos環境下執行 slice2cpp Printer.ice 命令

    會在當前目錄下產生兩個文件,自動生成的文件如下:

    Printer.h

    Printer.cpp

     

    2.4.2   Server

     

    2.4.3   Client

     

    2.5    C++/Java

    服務端采用C++實現,客戶端可以采用java實現。

    我們已Java,C++作為Ice例子原形,我們只需要運行C++服務端程序,在運行Java客戶端程序就可以實現JavaC++互聯互通。

    目前沒有我們所有實例都是基于同一臺機器的,實際情況服務端和客戶端會分布在不同機器上。這種情況下,我們需要如下修改:

    "default -p 10000" 采用 "tcp -h server1 -p port" 替代

    服務端所在主機IP: 10.0.68.18 ,端口:10080

    所以就修改為:tcp -h 10.0.68.18 -p 10080,再重新編譯就可以了

    客戶端也同樣修改就可以了

    如果要監聽多個端口,我么可以如下修改:

    服務端: tcp -h host -p port1:tcp -h host -p port2形式

    例:

    服務端 

    tcp -h 10.0.68.18 -p 10080: tcp -h 10.0.68.18 -p 10081

    客戶端:可以監聽兩個,也可以監聽一個

    posted on 2011-12-15 20:35 abin 閱讀(4800) 評論(1)  編輯  收藏

    Feedback

    # re: ICE簡介 2015-10-20 10:57 阿夫頓
    色鬼  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲五月综合缴情婷婷| 久久亚洲精品中文字幕无码| 久久这里只精品国产免费10| 美女被免费网站视频在线| 亚洲制服丝袜在线播放| 日韩激情无码免费毛片| 日韩精品免费在线视频| aa在线免费观看| 狠狠入ady亚洲精品| 亚洲一区二区三区国产精华液| 日产亚洲一区二区三区| 亚洲精品无码久久一线| 国产乱码免费卡1卡二卡3卡| 特黄特色的大片观看免费视频| 亚洲综合一区二区国产精品| 国产亚洲精品a在线观看| 亚洲av区一区二区三| 国产免费av一区二区三区| 女人被男人桶得好爽免费视频| 亚洲免费闲人蜜桃| 日韩成人毛片高清视频免费看| 亚洲乱理伦片在线观看中字| 国产99在线|亚洲| 亚洲人成网站看在线播放| 亚洲中文字幕久在线| 亚洲国产成人精品无码区在线网站 | 青娱乐免费在线视频| 一级毛片aaaaaa免费看| 久久香蕉国产线看免费| 一区二区三区四区免费视频| 国产免费AV片在线观看| 无码人妻精品中文字幕免费 | 国产性爱在线观看亚洲黄色一级片| 成人亚洲综合天堂| 亚洲色一色噜一噜噜噜| 亚洲桃色AV无码| 亚洲AV无码国产精品麻豆天美 | 久青草视频97国内免费影视| 伊人免费在线观看| 99热免费在线观看| 亚洲国产精品免费观看|