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 提供了一流的分布式计算开发和部署环境,比我们所知
道的其他任何平台都更完整。

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

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

(0)
上一篇 2022年6月1日 下午3:00
下一篇 2022年6月1日 下午3:00


相关推荐

  • ipconfig /flushdns的使用

    ipconfig /flushdns的使用ipconfig nbsp flushdns nbsp 刷新 dns 缓存的命令 nbsp nbsp nbsp nbsp nbsp 当访问一个网站时系统将从 DNS 缓存中读取该域名所对应的 IP 地址 当查找不到时就会到系统中查找 hosts 文件 如果还没有那么才会向 DNS 服务器请求一个 DNS 查询 DNS 服务器将返回该域名所对应的 IP 在你的系统收到解析地址以后将使用该 IP 地址进行访问 同时将解析缓存到本地的 DNS 缓存中 nbsp nbsp nbsp nbsp 如果 DNS 地址无

    2026年3月17日
    2
  • Midjourney开发者必看:MJ V7接口API Key获取及使用全攻略

    Midjourney开发者必看:MJ V7接口API Key获取及使用全攻略

    2026年3月15日
    2
  • dwr介绍

    dwr介绍br DWR DirectWebRem 是一个用于改善 web 页面与 Java 类交互的远程服务器端 Ajax 开源框架 可以帮助开发人员开发包含 AJAX 技术的网站 它可以允许在浏览器里的代码使用运行在 WEB 服务器上的 JAVA 函数 就像它就在浏览器里一样 br 它包含两个主要的部分 允许 JavaScript 从 WEB 服务器上一个遵循了 AJAX 原则的 Servlet 中获取数据 另外一方面一个 JavaScript 库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容 br DW

    2026年3月16日
    3
  • navigator 对象_monitor对象

    navigator 对象_monitor对象Navigator接口表示用户代理的状态和标识。它允许脚本查询它和注册自己进行一些活动

    2025年10月30日
    7
  • 扣子怎么拿到用户id

    扣子怎么拿到用户id

    2026年3月12日
    2
  • spectral安装

    spectral安装SpectralPyth SPy 是一个纯 Python 模块 用于处理高光谱图像数据 它具有读取 显示 操作和分类高光谱图像的功能 SPy 需要 Python 并依赖于其他几个免费提供的 Python 模块 在安装 SPy 之前 您应该确保满足其依赖项 虽然您可以仅使用 Python 和 NumPy 使用 SPy 处理高光谱数据 但如果您想使用 SPy 的任何图形功能 您还需要其他几个模块 Dependency Notes Python

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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