`

ICE简介

    博客分类:
  • ice
阅读更多
1.1    简介
ICE(Internet Communications Engine)是一个中间件平台。作为一个高性能的互联网通信平台,ICE包含了很多分层的服务和插件(Plug-ins),并且简单、高效和强大。

ICE当前支持C++、Java、C#、Visual Basic、Python和PHP编程语言,并支持在多种操作系统上运行。更多的操作系统和编程语言将会在以后的发布中支持。 


1.2    组成部分
ICE有以下几部分组成:



1.2.1   Slice
Slice(Specification Language for Ice) ,ICE的规范语言,跟CORBA的IDL(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++,Java,Python,PHP,C#和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
面向对象中间件平台的一个最大的挑战是安全性和防火墙。Glacier是Ice的防火墙解决方案,它大大简化了安全程序的部署。

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客户端程序就可以实现Java和C++互联互通。

目前没有我们所有实例都是基于同一台机器的,实际情况服务端和客户端会分布在不同机器上。这种情况下,我们需要如下修改:

"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简介(附代码).rar_ICE_c# ice_中间件

    在提供的`Ice简介(附代码).ppt`文件中,可能包含一个简单的C#示例,演示如何使用ICE创建和访问远程对象。通常,这会包括以下步骤: 1. **定义接口**:使用ICE IDL编写服务接口。 2. **编译接口**:使用`icecsharp`...

    ARM嵌入式开发流程和开发工具(含ADS与Multi ICE简介).doc

    ARM嵌入式开发流程和开发工具(含ADS与Multi ICE简介).doc

    zeroc ICE 3.3.1文档

    #### 二、ICE简介 - **定义**:ICE(Internet Communications Engine)是一个强大的中间件框架,用于构建高性能、可扩展的分布式应用程序。 - **功能**:ICE支持跨平台通信,能够简化复杂网络环境下的开发工作,提供...

    Ice Manual(3.7.0/3.7.1)

    1. **Ice简介**:介绍Ice的基本概念,包括其设计理念、支持的语言、以及在分布式系统中的角色。Ice通过提供一种简单、类型安全的接口定义语言(IDL)来定义服务接口,允许跨语言的互操作性。 2. **安装与配置**:...

    ZeroC ICE原理图

    #### 一、ZeroC ICE简介 ZeroC ICE(Internet Communications Engine)是由ZeroC公司开发的一款高性能、跨平台的中间件框架。该框架旨在为分布式应用程序提供一套完整且易于使用的解决方案,使得开发者能够在不同的...

    ICE中文编程指南

    #### 一、Ice简介与架构 - **Ice**(Internet Communications Engine)是一种用于构建分布式应用程序的框架,它允许不同语言编写的组件通过网络进行通信。Ice提供了跨平台的支持,可以在多种操作系统和硬件平台上...

    iOS利用ICE进行网络请求Demo

    1. **ICE简介**: ICE是一种网络连接协议,它主要用于解决P2P(点对点)通信中的NAT(网络地址转换)穿透问题。ICE允许设备通过公共互联网进行通信,即使它们位于不同的NAT后面。在iOS应用中,ICE通常与STUN(简单...

    ice权威指南完整版

    ### ZeroC Ice简介 ZeroC Ice是一种成熟且强大的中间件平台,旨在为开发者提供构建可扩展、高效能、跨平台的应用程序的能力。Ice支持多种编程语言(如C++、Java、Python等),并且能够在各种操作系统上运行。其核心...

    ice ppt ice 入门文档

    1. **ICE简介**:ICE是由ZeroC公司开发的,它提供了丰富的接口,支持多种编程语言,如C++、Java、Python等。ICE的主要功能是提供可靠的网络通信和对象间交互,它的设计目标是简化分布式系统的开发,提高其可扩展性和...

    ARM嵌入式开发流程和开发工具(含ADS与Multi ICE简介).docx

    - 图4-1展示了使用并口在线仿真器(如Multi-ICE)与宿主机和目标机之间的连接,以便进行程序的运行和调试。宿主机操作系统如Windows或Linux,选择取决于仿真器和开发需求。 3. **开发流程与工具**: - ARM嵌入式...

    ICE使用,包含SERVER和CLIENT端

    ### ICE简介 ICE 是 ZeroC 公司开发的一种组件通信技术,支持多种编程语言,如C++、Java、Python等。它提供了一种面向对象的、类型安全的远程调用协议,同时支持TCP/IP、HTTP、SSL等多种网络协议,确保了数据传输的...

    ICE 的安装及在vs2013里面的配置

    #### 一、ICE简介与安装 ICE(Internet Communications Engine)是一款高性能、可扩展的框架,用于构建分布式应用。它支持多种编程语言,包括C++、Java等,使得不同平台上的应用程序能够进行无缝通信。 #### 二、...

    ice入门例子

    1. **Ice简介** Ice是一个全面的解决方案,用于构建分布式系统,它支持多种编程语言,如C++、Java、Python等。Ice的核心是它的接口定义语言(IDL),它允许开发者定义跨语言、跨平台的接口,实现数据类型的自动序列...

    Ice 分布式程序设计 中文PDF版_C++_Zero_

    1. **ICE简介**:ICE是一种跨平台的、可扩展的分布式计算框架,它的设计目标是简化多语言环境下的分布式系统开发。ICE提供了丰富的特性,如类型安全、异步调用、负载均衡、故障恢复等。 2. **C++与ICE集成**:书中...

    开始玩ICE

    1. **ICE简介**: ICE是由ZeroC公司开发的一种现代分布式计算框架,它的设计目标是提供高效率、安全性和可扩展性。ICE支持多种通信模式,如请求-响应、发布-订阅以及对等通信,并且具有事务处理和异常处理机制。 2...

    Ice通信框架简介;Ice通信框架简介

    Ice通信框架简介;Ice通信框架简介;Ice通信框架简介

    Mulit ICE 使用手册

    #### 一、Multi-ICE简介 Multi-ICE是由ARM公司推出的一款官方仿真器,主要用于配合ARM Development Studio (ADS)通过JTAG接口对ARM器件进行调试。Multi-ICE不仅包含了硬件仿真器,还包括了一个名为Multi-ICE Server...

Global site tag (gtag.js) - Google Analytics