日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ICE简介

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ICE简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

總結

以上是生活随笔為你收集整理的ICE简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。