什么是ICE (Internet Communications Engine)

http://user.qzone.qq.com/77811970

直接在google上搜索ICE,出来的结果并不多,所以很多人就认为ICE是个神秘的东西,其实,国内已经有很多大型应用在使用ICE了。前段时间因为工作的关系被逼学习了ICE, 感觉不错的东西。我记录下入门的一些概念,希望对后来的学习者有所帮助。

  •     什么是ICE  (Internet Communications Engine)

首先,ICE是一个中间件(如果不懂什么是中间件,请先G一下),该中间件的目的是为上层应用提供高效的网络通信。

其次,ICE是跨平台的( Linux, Solaris, Windows and Mac OS X)、跨语言的( C++Java.NET-languages (such as C# or Visual Basic), Objective-C,PythonPHP, and Ruby[1] )

最后,ICE不仅仅提供网络通讯的解决方案,还提供一组完整的特性/组件 (比如防火墙、消息订阅、服务器、网格计算等),支持广泛的领域中的分布式应用开发

  •     搭建ICE运行环境

         去ICE的官网上下载for windows的安装文件:(or 猛击这里直接下载http://www.zeroc.com/download.html#win32_msi

按照提示安装完毕后,把bin 和 lib的路径添加到classpath和path

然后打开cmd, 输入slice2java, 如果出现一大堆slice2java的命令参数列表及使用方法,就说明你的ICE运行时安装完毕:)

 

  •     ICE是怎么工作的

         既然ICE是提供网络通讯服务,那么在ICE的使用场景中,必然有一个Client,一个Server。 Ice把能响应客户请求的实体看成一个Ice对象,(ice object),不管这个对象是存在于本地抑或远程。每个ice object都有一个或多个接口,使用者通过调用这些接口来使用ice object提供的服务(有点像java里的interface).

刚才提到,ICE是跨语言的,那么一个C的客户端如何调用Java写的应用程序呢?这就规定ice object的定义必须统一使用Slice语言来编写,然后通过ice的一系列编译器:slice2java, slice2cpp,slice2cs,slice2py,slice2freezz等,来生成特定语言的接口定义。接着你的应用就可以调用这个接口,来完成相应的操作。

2.1Chapter Overview

In this chapter, we present a high-level overview of the Ice architecture.

Section 2.2 introduces fundamental concepts and terminology, and outlines how

Slice definitions, language mappings, and the Ice run time and protocol work in

concert to create clients and servers. Section 2.3 briefly presents the object

services provided by Ice, and Section 2.4 outlines the benefits that result from the

Ice architecture. Finally, Section 2.5 presents a brief comparison of the Ice and

CORBA architectures.

2.1 章节预览

在这一章里,我们将呈现一个 ICE 架构的高层预览。 2.2 节将介绍一些基础的概念和术语,并概括一下 Slice 是如何定义的,语言是如何映射的,还有 Ice 运行时和协议在创建客户端和服务器时是如何保持一致的。 2.3 节简要的介绍一下 ICE 提供的对象服务。在 2.4 节概括一下由 ICE 架构所带来的好处。最后,在 2.5 节将提供一个 ICE 和 CORBA 架构的一个大概的比较。

2.2The Ice Architecture

2.2.1 Introduction

Ice is an object-oriented middleware platform. Fundamentally, this means that Ice provides tools, APIs, and library support for building object-oriented client–server applications. Ice applications are suitable for use in heterogeneous environments: client and server can be written in different programming languages, can run on different operating systems and machine architectures, and can communicate 10 Ice Overview using a variety of networking technologies. The source code for these applications is portable regardless of the deployment environment.

2.2 ICE 的架构

2.2.1 介绍

ICE 是一个面向对象的中间件平台。从根本上讲,这意味着 ICE 提供了一些工具、 API 和库用以开发面向对象的客户端 - 服务器的应用程序。 ICE 应用程序适合于用在各种异构的环境中:客户端和服务器可以用不同的语言编写,能够运行在不同的操作系统、不同体系结构的机器上,可以用不同的网络技术进行通讯 ( 大概 10 种以上 ) 。这些程序的源代码可以在不同的开发环境之间移植。

2.2.2 Terminology

Every computing technology creates its own vocabulary as it evolves. Ice is no exception. However, the amount of new jargon used by Ice is minimal. Rather than inventing new terms, we have used existing terminology as much as possible. If you have used another middleware technology, such as CORBA, in the past, you will be familiar with most of what follows. (However, we suggest you at least skim the material because a few terms used by Ice do differ from the corresponding CORBA terminology.)

2.2.2 术语

任何一个计算机技术在它的发展过程中都会创造一些术语。 ICE 也不例外。但是, ICE 所用的新术语是最少的。我们尽可能的用一些已经存在的术语,而不是发明新的。如果你以前用过其他的中间件产品的话,例如 CORBA ,你对下面的很多术语可能已经熟悉了。 ( 但是,我们建议你至少要掌握一些重要的东西,因为有一些术语在 ICE 中与在 CORBA 中的意思不同 )

Clients and Servers

The terms client and server are not firm designations for particular parts of an

application; rather, they denote roles that are taken by parts of an application for

the duration of a request:

• Clients are active entities. They issue requests for service to servers.

• Servers are passive entities. They provide services in response to client

requests.

l         客户端和服务器

客户端和服务器不是指应用程序的固定的某一方。相反,它们是指在应用程序请求期间某一方所扮演的角色。

客户端是主动的实体。它们向服务器发出服务请求。

服务器是被动的实体。它们向客户端提供服务。

Frequently, servers are not “pure” servers, in the sense that they never issue

requests and only respond to requests. Instead, servers often act as a server on

behalf of some client but, in turn, act as a client to another server in order to

satisfy their client’s request.

服务器并不总是一个“纯粹的”服务器 ( 所谓“纯粹的”服务器是指它们从来不发送请求,只是回应请求 ) 。通常情况下是这样,服务器相对自己的客户端时是服务器,但是,为了满足其客户端的请求,它们可能会是其他服务器的客户端。

Similarly, clients often are not “pure” clients, in the sense that they only

request service from an object. Instead, clients are frequently client–server

hybrids. For example, a client might start a long-running operation on a server; as

part of starting the operation, the client can provide a callback object to the server

that is used by the server to notify the client when the operation is complete. In

that case, the client acts as a client when it starts the operation, and as a server

when it is notified that the operation is complete.

同样的,客户端也不总是一个“纯粹的”的客户端 ( 所谓“纯粹的”的客户端是指只是从一个对象中请求服务) 。相反,客户端经常是一个客户端 - 服务器的混合体。例如,一个客户端可能会在服务器上启动一个长时间的操作,在启动这个操作时,客户端可能会向服务器提供一个回调对象,服务器可以在完成操作时用这个对象通知客户端。在这种情况下,客户端在启动操作时是一个客户端,在指定的操作完成被通知时是一个服务器。

Such role reversal is common in many systems, so, frequently, client–server

systems could be more accurately described as peer-to-peer systems.

这样的角色互换在很多系统中是很普通的,所以,一个客户端 - 服务器系统常常被精确的描述为一个 PtoP 系统。

Ice Objects An Ice object is a conceptual entity, or abstraction. An Ice object can be character-ized by the following points:

l         ICE 对象

一个 ICE 对象是一个概念上的实体,或者说是一种抽象。一个 ICE 对象可能有下面一些特征:

• An Ice object is an entity in the local or a remote address space that can respond to client requests.

一个 ICE 对象是一个在本地或远程地址空间中的一个实体,它能响应客户端的请求。

• A single Ice object can be instantiated in a single server or, redundantly, in multiple servers. If an object has multiple simultaneous instantiations, it is still a single Ice object.

单一的一个 ICE 对象可以在一个单一的服务器中,也可以在多个服务器中冗余。如果一个对象有多个相同的实例,它仍然是一个单一的 ICE 对象。

• Each Ice object has one or more interfaces . An interface is a collection of named operations that are supported by an object. Clients issue requests by invoking operations.

每个 ICE 对象有一个或多个接口。一个接口是一个对象所支持的命名操作的集合。客户端通过调用操作来发送请求。

• An operation has zero or more parameters as well as a return value . Parame-ters and return values have a specifictype . Parameters are named and have a direction: in-parameters are initialized by the client and passed to the server;out - param eters are initialized by the server and passed to the client. (The return value is simply a special out -param eter.)

一个操作有 0 个或多个参数,也有返回值。参数和返回值都有一个指定的类型。参数是命名的并且是指定方向的: in 型的参数在客户端初始化后传递到服务器, out 型的参数在服务器初始化后传递到客户端。 ( 返回值被简单的指定为 out 参数 )

• An Ice object has a distinguished interface, known as its main interface . In addition, an Ice object can provide zero or more alternate interfaces, known as facets . Clients can select among the facets of an object to choose the interface they want to work with.

一个 ICE 对象有一个著名的接口,那就是 main 接口。另外,一个 ICE 对象能提供 0 个或多个备用接口,就是facet 。一个客户端可以从对象提供的 facet 中选择一个 facet ,从而选择一个它们想要为其工作的接口。

• Each Ice object has a unique object identity . An object’s identity is an identifying value that distinguishes the object from all other objects. The Ice object model assumes that object identities are globally unique, that is, no two objects within an Ice communication domain can have the same object iden-tity.

每个 ICE 对象都有一个独一无二的对象标识。一个对象标识是区别于其他对象的一个标识值。 ICE 对象模型假设对象是全局唯一的,也就是说,在一个 ICE 的通信域不会有两个对象具有相同的标识。

In practice, you need not use object identities that are globally unique, such as UUIDs [14], only identities that do not clash within any other identity within your domain of interest. However, there are architectural advantages to using globally unique identifiers, which we explore in XREF.

实际上,你并不需要用像 UUID 一样的全局唯一的对象标识,只要在你感兴趣的域中没有碰撞就可以。然而,用全局唯一标识在会有一些架构上的优势,这一个我们将在 XREF 中进一步的探讨。

l         Proxies

For a client to be able to contact an Ice object, the client must hold a proxy for the

Ice object. A proxy is an artifact that is local to the client’s address space; it

represents the (possibly remote) Ice object for the client. A proxy acts as the local

ambassador for an Ice object: when the client invokes an operation on the proxy, the Ice run time: 1. Locates the Ice object 2. Activates the Ice object’s server if it is not running 3. Activates the Ice object within the server 4. Transmits any in-parameters to the Ice object 5. Waits for the operation to complete 6. Returns any out -parameters and the return value to the client (or throws an exception in case of an error)

l         代理

为了使一个客户端能够联系到一个 ICE 对象,这个客户端必须拥有这个 ICE 对象的一个代理。代理是一个位于客户地址空间的一个工具;对于客户端它代表着一个 ICE 对象 ( 可能在远端 ) ,对于 ICE 对象它是一个本地大使。当客户端调用一个在代理上的操作时, ICE 动作如下:

1 、定位一个 ICE 对象

2 、如果它没有运行则激活它

3 、激活服务器的 ICE 对象

4 、传输 in 参数到 ICE 对象

5 、等待操作完成

6 、返回 out 参数和返回值到客户端 ( 如果出错的话会 throw 一个异常 )

A proxy encapsulates all the necessary information for this sequence of steps to take place. In particular, a proxy contains:

• Addressing information that allows the client-side run time to contact the correct server

• An object identity that identifies which particular object in the server is the target of a request

• An optional facet identifier that determines which particular facet of an object the proxy refers to Section 29.8 provides more information about proxies.

一个代理封装了以上一系列动作发生时的必要的信息。特殊情况下,代理包含以下内容:

允许客户端一边在运行时联系到正确的服务器的寻址信息

一个对象标识,标识出请求的目标是哪一个特定的对象。

一个可选的 facet 标识符用来指定代理应该指向哪一个特定的 facet 。

在 29.8 节提供一更详细的关于代理的内容。

Stringified Proxies

The information in a proxy can be expressed as a string. For example, the string

SimplePrinter:default -p 10000

is a human-readable representation of a proxy. The Ice run time provides API calls

that allow you to convert a proxy to its stringified form and vice versa. This is

useful, for example, to store proxies in database tables or text files.

Provided that a client knows the identity of an Ice object and its addressing

information, it can create a proxy “out of thin air” by supplying that information.

In other words, no part of the information inside a proxy is considered opaque; a

client needs to know only an object’s identity, addressing information, and (to be

able to invoke an operation) the object’s type in order to contact the object.

l         字符串化的代理

一个代理的信息可以表示为一个字符串。例如,字符串 SimplePrinter:default –p 10000 是一个可读的代理的表示法。 ICE 运行时提供了 API 允许你将一个代理转换成它的字符化格式,或者相反的转换。这是很有用的,比如,要将代理保存到数据库或文本文件中的时候。假设一个客户端知道一个 ICE 对象的标识和它的地址信息,它就能通过提供的这些信息 “凭空”的创建出一个代理来。换句话说,代理中的信息是透明的;一个客户端仅需要知道一个对象的标识,地址信息和 ( 为了能调用一个操作 ) 为了能连接到对象所需要的类型信息。

Direct Proxies

direct proxy is a proxy that embeds an object’s identity, together with the

address at which its server runs. The address is completely specified by:

• a protocol identifier (such TCP/IP or UDP)

• a protocol-specific address (such as a host name and port number)

To contact the object denoted by a direct proxy, the Ice run time uses the

addressing information in the proxy to contact the server; the identity of the object

is sent to the server with each request made by the client.

l         直接代理

直接代理是这样的一个代理,它嵌入了一个对象的标识和其在上运行的服务器的地址。地址是十分详细的,包括:

一个协议标识 ( 如 TCP/IP 或 UDP)

一个特定协议的地址 ( 如一个主机名和一个端口号 )

为连接到一个用直接代理表示的对象, ICE 运行时用代理中的地址信息连接到服务器。对象的标识和客户端的每一次请求被一起发送到服务器。

Indirect Proxies An indirect proxy is a proxy that embeds an object’s identity, together with an object adapter name . Note that an indirect proxy contains no addressing informa-tion. To locate the correct server, the client-side run time uses the object adapter name inside the proxy and passes it to a locator service, such as the IcePack service. In turn, the locator uses the adapter name as the key to a lookup table that contains the address of the server and returns the current server address to the client. The client-side run time now knows how to contact the server and dispatches the client request as usual. The entire process is similar to the mapping from Internet domain names to IP address by the Domain Name Service (DNS): when we use a domain name, such as www.zeroc.com, to look up a web page, the host name is first resolved to an IP address behind the scenes and, once the correct IP address is known, the IP address is used to connect to the server. With Ice, the mapping is from an object adapter name to a protocol–address pair, but otherwise very similar. The client-side run time knows how to contact the IcePack service via configuration (just as web browsers know which DNS to use via configuration).

l         间接代理

间接代理是这样一个代理,它嵌入的是一个的标识以及对象的适配器名。注意一个间接代理没有包含地址信息。要定位到一个正确的服务器,客户端这边在运行时要将代理中的对象的适配器名传给一个定位服务,如IcePack 服务。接着,这个定位器把这个适配器名当作一个 key 在一个包括服务器地址的表中查找,找到后将当前服务器的地址返回给客户端。这时客户端知道了如何连接到服务器,就像通常一样分发请求给服务器了。整个过程就像用 DNS 服务将 Internet 域名映射为 IP 地址一样。当我们用一个域名去访问一个 web 页的时候,如 www.zeroc.com,主机名在后台先被解析为一个 IP 地址,一旦知道了正确的 IP 地址,就可以通过 IP 地址连接到服务器了。在 ICE 中,这种映射是从一个对象适配器名到一个协议 - 地址对,其他的就相似了。客户端在运行时通过配置就知道如何连接到 IcePack 服务器 ( 正如 web 浏览器可以通过配置知道 DNS 一样 ) 。

时间: 2024-10-16 06:20:47

什么是ICE (Internet Communications Engine)的相关文章

The Internet Communications Engine (Ice) 跨平台异构通讯方案 第一弹-ICE简介

.net中的通讯方案很多,从.net Remoting,MSMQ,Webservice,WSE,WCF等等,他们都有一个特点,易用,但是都不能跨语种异构,如果你服务端要用java开发,客户端用C#开发,或者其它语言譬如C++, Python,PHP, Ruby, Objective-C,等等,那么.net提供的解决方案将不再有效.现在,隆重推出跨平台异构方案ICE.ICE官网:http://www.zeroc.com/ice.html 简介:The Internet Communications

ZeroC Ice启用SSL通讯的配置

Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯屏蔽.https://zeroc.com/ 该中间件在跨语言集成时比较方便,如下就是在JAVA C++之间交互时,启用ssl通讯的设置 1. 证书生成 ICE提供申请证书的脚步,通过ICE脚本,可生成所需的证书.进入Ice-3.5.1/cpp/src/ca目录. 1.1. 生成根证书,输入证书相关信

C#+ICE+TCP通信=数据传输

最近项目中运用到了ICE文件传输.第一课(ICE的介绍)   一. 介绍ICE ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得(C#.php.c++.java或python)与java,c++,.net,python等进行交互.基于ICE可以实现电信级的解决方案. ICE,是一种流行的面向对象的中间件,用来作网络通讯引擎. 二.ICE 的好处 面向对象的语义,所有的操作调用都使用迟后绑定. 支持同步和异步的消息传递,提

ice安装以及简单使用

ICE(Internet Communications Engine)是一个中间件平台.作为一个高性能的互联网通信平台,ICE包含了很多分层的服务和插件(Plug-ins),并且简单.高效和强大. ICE当前支持C++.Java.C#.Visual Basic.Python和PHP编程语言,并支持在多种操作系统上运行.更多的操作系统和编程语言将会在以后的发布中支持. 1:下载安装包:http://www.zeroc.com/download.html 2:安装ice并在环境变量中配置ice的安装

PHP中间件--ICE

ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件.使用ICE能使得php(或c++,java,python)与java,c++,.net,python等进行交互.基于ICE可以实现电信级的解决方案. 1第一个问题:为什么要使用中间件? 设想一个这样的场景:对于一个大型网站来说,往往有很多个web服务器,每个web服务器都存在很多对于数据库的操作.如果直接在php程序上直接操作数据库,那么势必要在每台web服务器都配置数据库的用户名,密码等

论软件工程

论软件工程 昨天一位同学问我对软件工程的体会?当时愣住了一下,不知道该怎么回答,感觉话到嘴边却不知道怎么表达,因为这个话题比较沉重,不知道该怎么用简短的语言来进行描述,要说可能一天都说不完,可能是自己的表达能力有限,语文没学好(高考语文不到80分),当时只是给出了:"这叫我怎么回答"这样的答案.随后在我的脑海里一直回忆自己开发经历,想从中找到一些信息.第一次听到软件工程是大三的时候有一门课程叫做软件工程,我依稀记得里面几个关键词语:髙聚类.低耦合.可扩展性.可行性.可维护性,同时还包括

[转]Microsoft Platform SDK 选择及在vc++6.0中的配置

Windows Platform SDK Download Sites: Windows Server 2003 PSDK February 2003 Edition,可以和VC6一起使用.并支持各种目标OS的最后一个版本的SDK. This edition of the SDK supports development for the following platforms: Windows Server 2003 Windows Advanced Server, Limited Editio

ICE中间件说明文档

1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         通信器 2.2.2         对象适配器 2.2.3         位置透明性 2.3        异步编程模型 2.3.1         异步方法调用 2.3.2         异步方法分派 2.4        订阅/发布编程模型 2.5        动态服务管理(IceBox) 2.6       

ICE概述

网络通信引擎(Internet Communications Engine, Ice)是由ZeroC的分布式系统开发专家实现的一种高性能.面向对象的中间件平台.它号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯屏蔽.因此相比CORBA,DCOM,SOAP,J2EE等的中间件技术,自然是集众多优点于一身,而却没有他们的缺点. Ice提供了完善的分布式系统解决方案,适合所有的异构网络环境:客户端和服务器端可以用不同的程序语言来实现,可以运行在