1、ICE是什么?
ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数等。
2、为什么会有ICE?
ICE是分布式应用的一种比较好的解决方案,虽然现在也有一些比较流行的分布式应用解决方案,如微软的.NET(以及原来的DCOM)、CORBA及WEB SERVICE等,但是这些面向对象的中间件都存在一些不足:
.NET是微软产品,只面向WINDOWS系统,而实际的情况是在当前的网络环境下,不同的计算机会运行不同的系统,如LINUX上面就不可能使用.NET;
CORBA虽然在统一标准方面做了很多的工作,但是不同的供应商实现之间还是缺乏互操作性,并且目前还没有一家供应商可以针对所有的异种环境提供所有的实现支持,且CORBA的实现比较复杂,学习及实施的成本都会比较高;
WEB SERVICE最要命的缺点就是他的性能问题,对于要求比较高的行业是很少会考虑WEB SERVICE的。
ICE的产生就是源于.NET、CORBA及WEB SERVICE这些中间件的不足,它可以支持不同的系统,如WINDOWS、LINUX等,也可以支持在多种开发语言上使用,如C++、C、JAVA、RUBY、PYTHON、VB等,服务端可以是上面提到的任何一种语言实现的,客户端也可以根据自己的实际情况选择不同的语言实现,如服务端采用C语言实现,而客户端采用JAVA语言实现,底层的通讯逻辑通过ICE的封装实现,我们只需要关注业务逻辑。
3、ICE是如何工作的?
Ice 是一种面向对象的中间件平台,这意味着 Ice为构建面向对象的客户-服务器应用提供了工具、API 和库支持。要与Ice持有的对象进行通信,客户端必须持有这个对象的代理(与CORBA的引用是相同的意思),这里的代理指的是这个对象的实例,ICE在运行时会定位到这个对象,然后寻找或激活它,再把In参数传给远程对象,再通过Out参数获取返回结果。
这里提到的代理又分为直接代理和间接代理,直接代理其内部保存有某个对象的标识,以及它的服务器的运行地址;间接代理指的是其内部保存有某个对象的标识,以及对象适配器名(object adapter name),间接代理没有包含寻址信息,为了正确地定位服务器,客户端在运行时会使用代理内部的对象适配器名,将其传给某个定位器服务,比如IcePack服务,然后,定位器会把适配器名当作关键字,在含有服务器地址的表中进行查找,把当前的服务器地址返回给客户,客户端 run time现在知道了怎样联系服务器,就会像平常一样分派 (dispatch)客户请求。
ICE可以保证在任何的网络环境或者操作系统下,成功的调用只有一次,它在运行时会尽力的定位到远程服务器,在连接失败的情况下会做尝试性重复性连接,确实连不上的情况会给用户以提示。
客户端在调用服务端的方法时,可以采取同步或异步的方式实现,同步调用就相当于调用自己本地的方法一样,其它行为会被阻塞;异步调用是非常有用的调用方式,如服务端需要准备的数据来自于其它异步接口,这个时候客户端就不需要等待,待服务端数据准备充份后,以消息的方式通知客户端,服务端就可以去干其它的事情了,而客户端也可以到服务端获取数据了。
4、ICE调用模式
ICE采用的网络协议有TCP、UDP以及SSL三 种,不同于WebService,ICE在调用模式上有好几种选择方案,并且每种方案正对不同的网络协议的特性做了相应的选择。
Oneway(单向调用):客户端只需将调用注册到本地传输缓冲区(Local Transport Buffers)后就立即返回,不会等待调用结果的返回,不对调用结果负责。
Twoway(双向调用):最通用的模式,同步方法调用模式,只能用TCP或SSL协议。
Datagram(数据报):类似于Oneway调用,不同的是 Datagram调用只能采用UDP协议而且只能调用无返回值和无输出参数的方法。
BatchOneway(批量单向调用):先将调用存 在调用缓冲区里面,到达一定限额后自动批量发送所有请求(也可手动刷除缓冲区)。
BatchDatagram(批量数据报):与上类似。
不同的调用模式其实对应着不动的业务,对于大部分的有返回值的或需要实时响应的方法,我们可能都采用Twoway方式调用,对于一些无需返回值或 者不依赖返回值的业务,我们可以用Oneway或者BatchOneway方式,例如消息通知;剩下的Datagram和BatchDatagram方式 一般用在无返回值且不做可靠性检查的业务上
后记
这里只是简单的对ICE进行介绍,还有很多东西没有提到,如ICE的语法规则、ICE的版本控制(Facet)、持久化 (Feeze)、服务装箱管理 (ICEBox)、文件分发(ICEPatch2)、发布/订阅 服务(ICEStorm)、网络拓扑负载解决方案--终极武器(ICEGrid)、提供使用安全传输入协议SSL的插件(IceSSL)、轻量级的ICE应用防火墙其解决方案(Galcier2),这些留待大家后面去学习了
demo连接
https://www.cnblogs.com/laobiao/p/7226835.html?utm_source=itdadao&utm_medium=referral
分享到:
相关推荐
在给定的 "ICE 简单客户端和服务端实例" 中,我们有两个关键组件:consoleClient 和 consoleServer,它们是 ICE 框架下的基础应用示例,用于演示客户端和服务端如何交互。** **VS2005 (Visual Studio 2005) 是 ...
在C++编程环境中,ICE为开发者提供了一套强大的工具和库,使得构建分布式应用程序变得更加简单。本示例程序是基于ICE的C++实现,适用于Visual Studio 2008开发环境,非常适合初学者学习和理解ICE框架的基本用法。 ...
随后,文档通过一个简单的HelloWorld应用示例,展示了如何编写Slice定义,并通过C++和Java编写ICE应用程序。 _slice语言_是ICE的核心部分,文档详细介绍了Slice语言的编译过程、源文件结构、词法规则等。Slice语言...
这是继ice入门例子的第二个例子,主要讲述Ice.Application与配置文件的简单使用 所需jar在lib中 这个例子中集成了日志插件,在服务器启动时,该插件会工作一次, 文件名:config.server 服务端配置文件 #配置...
在“ICE 示例代码”中,你可以找到用这些语言编写的示例程序,以帮助理解和学习如何使用 ICE 进行实际开发。这些示例通常涵盖了 ICE 的基础功能和高级特性,例如对象透明远程调用、接口继承、多线程处理、异常处理、...
在本文中,我们将深入探讨ICE (Internet Communications Engine) 3.7.3版本的安装以及如何在C#环境中集成和使用ICE库。ICE是一个跨平台的中间件,它提供了高性能的分布式计算解决方案,用于构建并发、实时和安全的...
在这个示例中,服务器端(ICEServer)可能包含了一个简单的控制台交互,当接收到客户端的文本消息时,会在控制台打印出来。客户端则可能会持续等待用户输入,然后通过ICE发送到服务器。 通过学习和理解这个例子,你...
总的来说,"ICE例子(非常简单,使大家方便入门)"是一个很好的起点,通过它,初学者可以快速掌握ICE的基本用法,并逐步深入到更复杂的分布式系统开发中去。记住,实践是检验知识的最好方式,动手尝试并不断调试,你...
Ice的核心理念是将复杂的分布式系统设计和实现简化为更简单、更直观的过程。它通过抽象掉底层网络细节,如协议栈、序列化/反序列化过程以及错误处理机制,使开发者能够专注于业务逻辑的编写。这种设计使得Ice在多个...
- `ICEtext`很可能是一个包含示例代码或说明文档的文件,它可能展示了如何在C++中创建一个简单的ICE客户端和服务端,包括如何定义Slice接口、编译Slice、创建代理、调用服务以及处理响应。 6. **调试和日志**: -...
这一章节通过创建一个简单的HelloWorld应用来介绍Ice的基本使用方法。具体包括: - **1.2.1 编写 Slice 定义**:指导用户如何编写Slice文件来定义应用的服务接口。 - **1.2.2 使用 C++ (C++11) 编写 Ice 应用**:...
下面将详细介绍Ice中间件的主要特性、安装过程以及如何在项目中应用。 1. **Ice中间件特性** - **类型安全**:Ice提供了强大的类型系统,确保在分布式环境中数据的准确传输,避免了类型转换错误。 - **序列化**:...
2. 编译和运行示例:通过修改和运行例子,掌握Ice的基本用法。 3. 阅读源码:逐步深入到源码层面,理解通信协议、序列化、多线程等核心机制。 4. 学习工具:学习如何使用Ice提供的工具进行服务部署、监控和调试。 5....
为了帮助初学者更好地理解ICE的使用方法,本部分提供了几个示例程序的详细说明,包括如何编写ICE文件、生成代码以及实现客户端和服务端的具体功能。通过这些示例,读者可以深入了解ICE的工作原理及其在实际开发中的...
例如,这里给出了一个简单的示例: ```slice module MyDemo { sequence<byte> SendBytes; interface IHelloWorld { int SendCommand(SendBytes bytes, out string remsg); int SendCommandStr(string s, out ...
在本示例中,我们将探讨如何在Java环境中使用ICE 3.4.1版本,特别是如何集成到Spring框架中,创建SERVER和CLIENT端应用程序。** ### ICE简介 ICE 是 ZeroC 公司开发的一种组件通信技术,支持多种编程语言,如C++、...
2. 编写第一个ICE程序:通过创建简单的服务和客户端,了解ICE的工作流程。 3. 探索高级特性:深入研究多线程、安全性、服务发现等特性。 4. 实战项目:参与实际项目,提升对ICE在复杂环境下的应用理解。 本“ICE...
- **示例代码**:通过学习官方提供的示例代码,快速掌握ICE的使用方法。 #### 结论 ICE 3.3.1作为一个成熟的分布式编程框架,在多个领域都有广泛应用。通过对该版本的深入了解,可以帮助开发者更好地利用ICE的强大...