ICE初识

ICE初识
ICE:InternetCommunicationsEngine
一种适用于异种环境的面向对象中间件平台
他为我们提供了除DCOM,CORBA,JAVARMI,.NETRemoting,WebService,SOAPRPC以外的一种远程调用方式。
更重要的是ICE是一种跨操作系统跨语言的远程调用方式(支持.NET1.1MONO1.0)。

主页在:http://www.zeroc.com/index.html

大家好,又见面了,我是你们的朋友全栈君。

ICE:Internet Communications Engine
一种适用于异种环境的面向对象中间件平台
他为我们提供了除DCOM,CORBA,JAVA RMI,.NET Remoting, Web Service,SOAP RPC以外的一种远程调用方式。
更重要的是ICE是一种跨操作系统跨语言的远程调用方式(支持.NET1.1 MONO1.0)。

主页在:http://www.zeroc.com/index.html

下面摘录几段ICE1.3文档中的话:
Ice 是一种面向对象的中间件平台。从根本上说,这意味着Ice 为构建面
向对象的客户-服务器应用提供了工具、API 和库支持。Ice 应用适合在异
种环境中使用:客户和服务器可以用不同的编程语言编写,可以运行在不
同的操作系统和机器架构上,并且可以使用多种网络技术进行通信。无论
部署环境如何,这些应用的源码都是可移植的

Ice 对象(Ice Objects)
Ice 对象是一种概念性的实体(或称抽象)。Ice 对象具有以下特征:
• Ice 对象是本地或远地的地址空间中、能响应客户请求的实体。
• 一个Ice 对象可在单个或多个服务器中实例化(后者是冗余方式)。如果
某个对象同时有多个实例,它仍是一个Ice 对象。
• 每个Ice对象都有一个或多个接口。 一个接口是一个对象所支持的一系列
有名称的操作。客户通过调用操作来发出请求。
• 一个操作有零个或更多参数,以及一个返回值。参数和返回值具有明确
的类型。参数是有名称的,并且有方向:in 参数由客户初始化,并传给
服务器; out 参数由服务器初始化,并传给客户(返回值只是一种特
殊的out 参数)。
• 一个Ice 对象具有一个特殊的接口,称为它的主接口。此外, Ice 对象还
可以提供零个或更多其他接口,称为facets (面)。客户可以在某个对
象的各个facets 之间进行挑选,选出它们想要使用的接口。
• 每个Ice 对象都有一个唯一的对象标识(object identity)。对象标识是用
于把一个对象与其他所有对象区别开来的标识值。Ice 对象模型假定对
象标识是全局唯一的,也就是说,在一个Ice 通信域中,不会有两个对
象具有相同的对象标识。
在实践中,你不需要使用像UUID[14] 这样的全局唯一的对象标识,
只要你使用的标识与你感兴趣的域中的其他任何标识不相冲突,就可以
了。但在架构上,使用全局唯一的标识符能带来一些好处,我们将在
XREF 中对此加以探究。

代理(Proxies)
要想与某个Ice 对象联系,客户必须持有这个对象的代理1。 代理是客户
的地址空间中的一种制品(artifact);对客户而言,代理就是Ice 对象的
代表(该对象可能在远地)。一个代理充当的是一个Ice 对象的本地大使:
当客户调用代理上的操作时, Ice run time 会:
1. 定位Ice 对象
2. 如果Ice 对象的服务器没有运行,就激活它
3. 在服务器中激活Ice 对象
4. 把所有in 参数传送给Ice 对象
5. 等待操作完成
6. 把所有out 参数及返回值返回给客户(或在发生错误的情况下抛出异
常)
代理封装了完成这一系列步骤所必需的全部信息。特别地,代理包含
有:
• 寻址信息:用于让客户端run time 联系正确的服务器
• 对象标识:用于确定服务器中的哪一个对象是请求的目标
• 可选的facet 标识符:用于确定代理所引用的是对象的哪一个facet

串化代理(Stringified Proxies)
代理中的信息可以用串的形式表示。例如:
SimplePrinter:default -p 10000
这个字符串表示的是一个代理,我们可以阅读这种表示方式。Ice run
time 提供了一些API 调用,允许你把代理转换成它的串化形式,或是进行
相反的转换。例如,如果你要把代理存储在数据库表或文本文件中,这种
功能会很有用。
倘若客户知道某个Ice 对象的标识及其寻址信息,使用这些信息,它可
以“凭空”创建代理。换句话说,代理内部的所有信息都被认为是透明的
;要与某个对象联系,客户只需要知道这个对象的标识、寻址信息,以及
对象的类型(为了能调用操作),就可以了。

Ice 核心为分布式应用开发提供了一个完善的客户-服务器平台。但现
实应用需要的常常不止是远地通信能力:你通常还需要拥有这样的能力:
随需启动服务器、把代理分发给客户、分发异步事件、配置你的应用、分
发应用补丁,等等。
在Ice 中有一些服务, 能够提供上述特性及其他一些特性。这些服务被
实现成Ice 服务器,你的应用充当的是这些服务器的客户。这些服务都没有
使用Ice 的任何向应用开发者隐藏起来的内部特性,所以在理论上,你可以
自行开发等价的服务。但让这些服务成为平台的一部分,你就可以专注于
应用开发,而不必先构建许多基础设施。而且,构建这样的服务所需的工
作量并非微不足道,所以你应该了解有哪些服务可用,而不要重新发明你
自己的轮子。

Ice 在架构上为应用开发者提供了一些好处:
• 面向对象的语义
Ice “在线路上”完全保留了 面向对象范型。所有的操作调用都使用
迟后绑定,所以操作的实现的选定,是根据对象在运行时的(而不是
静态的)实际类型决定的。
• 支持同步和异步的消息传递
Ice 提供了同步和异步的操作调用和分派,并且通过IceStorm 提供了
发布-订阅消息传递机制。这样,你可以根据你的应用的需要来选择通
信模型,而不必把你的应用硬塞进某种模型里。
• 支持多个接口
通过facets,对象可以提供多个不相关的接口,同时又跨越这些接
口、保持单一的对象标识。这提供了极大的灵活性,特别是在这样的情
况下:应用在发生演化,但又需要与更老的、已经部署的客户保持兼
容。
• 机器无关性
客户及服务器与底层的机器架构屏蔽开来。对于应用代码而言,像
字节序和填充这样的问题都隐藏了起来。
• 语言无关性
客户和服务器可以分别部署,所用语言也可以不同(目前支持
C++、Java,以及PHP (客户端))。 客户和服务器所用的Slice 定义建
立两者之间的接口合约,这样的定义也是它们唯一需要达成一致的东
西。
• 实现无关性
客户不知道服务器是怎样实现其对象的。这意味着,在客户部署之
后,服务器的实现可以改变,例如,它可以使用不同的持久机制,甚至
不同的程序设计语言。
• 操作系统无关性
Ice API 完全是可移植的,所以同样的源码能够在Windows 和UNIX
上编译和运行。
• 线程支持
Ice run time 完全是线程化的,其API 是线程安全的。 作为应用开发
者,(除了在访问共享数据时进行同步)你无需为开发线程化的高性能
客户和服务器付出额外努力。
• 传输机制无关性
Ice 目前采用了TCP/IP 和UDP 作为传输协议。客户和服务器代码都
不需要了解底层的传输机制(你可以通过一个配置参数选择所需的传
输机制)。
• 位置和服务器透明性
Ice run time 会负责定位对象,并管理底层的传输机制,比如打开和
关闭连接。客户与服务器之间的交互显得像是无连接的。如果在客户调
用操作时,服务器没有运行,你可以通过IcePack 让它们随需启动。服
务器可以迁移到不同的物理地址,而不会使客户持有的代理失效,而客
户完全不知道对象实现是怎样分布在多个服务器进程上的。
• 安全性
通过SSL 强加密,可以使客户和服务器完全安全地进行通信,这
样,应用可以使用不安全的网络安全地进行通信。你可以使用Glacier
穿过防火墙,实现安全的请求转发,并且完全支持回调。
• 内建的持久机制
使用Freeze,创建持久的对象实现变成了一件微不足道的事情。Ice
提供了对高性能数据库Berkeley DB[18] 的内建支持。
• 开放源码
Ice 的源码是开放的。尽管要使用Ice 平台,并不一定要阅读源码,
通过源码你可以了解各种事情是怎样实现的,或把这些代码移植到新的
操作系统上。
总而言之, Ice 提供了一流的分布式计算开发和部署环境,比我们所知
道的其他任何平台都更完整。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137722.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 进程间的7种通信方式_linux 进程间通信

    进程间的7种通信方式_linux 进程间通信1无名管道通信无名管道(pipe):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2高级管道通信高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。3有名管道通信有名管道(namedpipe):有名管道也是半双工的通信方式,但是它允许

    2022年10月11日
  • java声明数组的时候,同时赋值[通俗易懂]

    java声明数组的时候,同时赋值[通俗易懂]声明数组的时候,同时赋值int[]ary1={1,2,3};

  • 怎么向表结构是自增长的表中插入一条数据 SQLCODE=-798, SQLSTATE=428C9, SQLERRMC=ID

    怎么向表结构是自增长的表中插入一条数据 SQLCODE=-798, SQLSTATE=428C9, SQLERRMC=ID

  • java128陷阱

    java128陷阱public static void main(String[] args){ Integer a=128; Integer b=128; System.out.print(a==b);//false a=127; b=127; System.out.print(a==b);//true}为什么对于一个Integer来说,两个Integer都为128的时候通过判断为false,127时的却是true呢?其实这一切都是因为Java中的装箱

  • 协同过滤推荐算法(一)原理与实现

    协同过滤推荐算法(一)原理与实现一、协同过滤算法原理协同过滤推荐算法是诞生最早,并且较为著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品。协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-basedcollaboratIvefiltering),和基于物品的协同过滤算法(item-basedcollaborati…

  • int使用规则_single是什么数据类型

    int使用规则_single是什么数据类型先说结论吧,方便快速查询验证。总结区别int类型大小为8字节int8类型大小为1字节int16类型大小为2字节int32类型大小为4字节int64类型大小为8字节go语言中的int的大小是和操作系统位数相关的,如果是32位操作系统,int类型的大小就是4字节;如果是64位操作系统,int类型的大小就是8个字节取值范围int8:-128~127int16:-32768~32767int32:-2147483648~214

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号