`
wanxiaotao12
  • 浏览: 476904 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ice学习与应用

 
阅读更多
对于ice以前只是粗细的了解了下,最多的使用也就是使用现在成的调用一下别人的服务。可近期将会用到ice来做服务,为此花了一些时间看看ice。
ice是一个对象中间件,可用多系统间通信。
  • 1. 它提供了slice语言机制,将x.ice映射成各种语言,以消除各编辑语言之间的差别。多语言系统可用。
  • 2. 提供了rpc远程调用机制。
  • 3. 组件化, 提供了icegrid, icebox, icepack等更为方便 。

机制与原理
一、communicator连接器。是ice run time最为主要的, 它包含了一些主要信息:
  • a. 线程池(server, client)
  • b. 日志记录(Ice.Logger)
  • c. 统计(Ice.Stats)
  • d. 对象适配器(Ice.Adapter)
  • e. Ice.Router
  • f. Ice.ServantLocator

因此它当中的方法也一般也上面那些相关。最为关键是的程序退出要清理,最好一个注册退出钩子:Runtime.getRuntime().addShutdownHook();

二、ObjectAdapter(对象适配器)
上接commumicator, 下对servant.提供ice对象与sevrvant的映射。称为asm表(active servant map)。
通过add(servant, identity)来绑定,remove来解除绑定。
有三种状态.
hold, 不接受新的连接请求, 但已连接的发送请求可以接受,会发出TimeoutException(除非当中变为activate)
activate,
deactivate。不活动也就是销毁状态,不接受任何请求。
三、上下文
Ice.Current 对于每个实现的接口最后一个参数都有一个这样的,它可以用于token来安全机制。

四、servant查找
  • 1. 当请求到Adapter时候,会在 ASM中查找该标识。如果 ASM 有这样一个条目,就把请求分派到对应的 servant。
  • 2. 如果到来的对象标识的范畴不是空的,就查找针对该范畴注册的 servant定位器。如果有这样的 servant 定位器,就调用这个定位器的locate.如果locate 返回一个 servant,就把请求分派到该 servant,然后调用finished ;而如果locate 调用返回 null,就在客户端引发ObjectNotExistException。
  • 3. 如果到来的对象标识的范畴是空的,或者在第 2步找不到针对该范畴的servant 定位器,就去查找缺省的 servant 定位器 (也就是,针对空范畴注册的 servant 定位器) 。如果有缺省的 servant 定位器,就像第 2 步那样分派请求。
  • 4. 在客户端ObjectNotExistException。,

五、异步
ice异步有两种形式,一种是客户端的ami形式。另一种是服务器端的amd
在3.4.1中时ami已经不用显示指定slice时就会生成callback类,在客户端直接用say()是同步的,begin_say(name, callback)就是异步的。
amd得显示指定了,指定后方法的实现变为:sayHello_async(AMD_Hello_sayHello cb, int delay, Ice.Current current)。
需要自己队列来存储cb,执行操作后cb.ice_response返回客户端,用Exector很好实现。
(这样做好处是可以提高服务的接收能力不会因为线程池数量不够而不接受请求,但处理能力还是一样的,有可能由于接受太多,处理不过来而造成更大的问题,如内存等,原来的同步加ice本生的线程池已经足够了)

实践与问题
a. ice对于内置参数的null时默认置成空值, stirng => "", dictionary => {}, 因为ice在写数据时_os.write(value);会直接出空异常
  这样对自己的定义返回struct,class时就不能为null, 要实例化一个再返回 
b. slice不支持版本,对于定义的数据或接口若后面要改很不方便。要重新slice2XXX。 客户端,服务端都得动,特别是有时候接口参数多一个时,相等于重写了。 
  接口定义时额外加<string, string>一个参数用扩展
  数据定义时额外加<string, string>一个参数用扩展,

c. 对于包层级高有时多那么多的module,可用如下元数据
Java代码 复制代码 收藏代码
  1. [[java:package:com.shguo.ice]]
  2. module test{
  3. dictionary<long, string> longStringMap;
  4. interface ServiceA{
  5. string hello(string name);
  6. }
  7. } 
[[java:package:com.shguo.ice]]
module test{
	dictionary<long, string> longStringMap;
	interface ServiceA{
		string hello(string name);
	}
} 

d. 只提供bool, byte, int, long, float, double, string, sequeue, dictionary, struct, class, interface,没有date, 将要自己将date转为string.
有些繁琐。
e. Object* 指的是返回代理(体现为Prx)。

f. 有用的属性:
Java代码 复制代码 收藏代码
  1. Ice.Default.Host=host
  2. Ice.Default.Protocol=tcp
  3. Ice.RetryIntervals=num [num ...]
  4. Ice.Default.Locator=locator
  5. Ice.Override.Timeout
  6. Ice.Override.ConnectTimeout=num
  7. name.Endpoints=endpoints
  8. name.Locator=locator
  9. Ice.ThreadPool.Client Size, SizeMax, SizeWarn
  10. Ice.ThreadPool.Server Size, SizeMax, SizeWarn
Ice.Default.Host=host
Ice.Default.Protocol=tcp
Ice.RetryIntervals=num [num ...]
Ice.Default.Locator=locator

Ice.Override.Timeout
Ice.Override.ConnectTimeout=num
     
name.Endpoints=endpoints
name.Locator=locator

Ice.ThreadPool.Client  Size, SizeMax, SizeWarn
Ice.ThreadPool.Server  Size, SizeMax, SizeWarn

转:http://yidianfengfan.iteye.com/blog/983628
分享到:
评论

相关推荐

    ICE学习资料ICE学习资料ICE学习资料

    此外,论文还可能对比了ICE与其他中间件如CORBA、RMI的差异,并通过实际案例展示了ICE在实际应用中的效果。 综合这些资料,学习ICE不仅需要理解其核心概念,如对象代理、冰点接口(Ice interfaces)、多线程通信,...

    zeroc ice教程 ice环境配置 Ice中文教程 C++ ICE java ICE ICE入门 ice基础教程 ice开发文档

    总结来说,文档为开发者提供了一个全面的ICE学习指南,从ICE的基础知识到实际的编程应用,再到配置和性能优化,覆盖了ICE开发的各个方面。通过阅读这份文档,开发者能够掌握ICE的使用方法,并能在实际项目中有效应用...

    Zeroc_ICE学习大全

    **Zeroc ICE 学习大全** Zeroc ICE(Integration and Communication Environment)是一种高性能、跨平台的中间件,用于构建分布式系统。它提供了一种简单而强大的方式来实现对象间的远程调用,使得开发人员可以像...

    ice分布式应用开发

    ### Ice分布式应用开发知识点概述 #### 一、Ice框架简介 - **Ice**(Internet Communications Engine)是一款开源的中间件框架,旨在简化分布式应用程序的开发。它提供了跨平台的通信能力,支持多种编程语言(如...

    一个ICE的简单应用(客户端,服务端都有)

    这个“一个ICE的简单应用(客户端,服务端都有)”的压缩包提供了一个快速上手ICE的实例,非常适合初学者进行学习。 ICE支持C++,Java,Python等多种编程语言,而这里标签明确指出了"ICE c++",所以我们将重点讨论...

    ice与pb结合

    标题中的“ice与pb结合”指的是在IT领域中,ICE(Internet Communication Engine)框架与Protocol Buffers(简称PB)的整合应用。ICE是一款强大的分布式中间件,它支持多种编程语言,如C++、Java、Python等,用于...

    Ice-1.3.0_分布式应用(中文版)

    《Ice-1.3.0 分布式应用(中文版)》是一份关于ZeroC ICE(Internet Communication Engine)RPC框架的教程,虽然版本较旧,但依然具备学习价值。RPC,即远程过程调用,是一种分布式系统通信技术,使得应用程序可以像...

    ice.rar_ice matlab_ice.m matlab_matlab ice_matlab ice_matlab i

    理解并掌握ICE源码有助于我们深入学习数字图像处理,不仅能应用在冈萨雷斯的教材中,也能灵活运用到实际项目中。通过阅读和分析ice.m文件,我们可以学习到MATLAB在图像处理领域的强大功能,以及如何利用这些功能实现...

    ice教程和ice中文版手册

    ICE中文版手册是针对中国开发者特别准备的文档,有助于那些更习惯阅读中文文档的程序员更好地理解和应用ICE。手册中通常包含了详细的技术规范、API参考、示例代码以及最佳实践。通过阅读手册,开发者可以了解如何...

    Ice-3.3.1 ICE

    描述:"ICE最新版官方的学习资料,因为中文基本没有,一起啃吧" 标签:"ICE" 知识点解析: ### Ice:分布式编程框架 Ice,全称为Internet Communications Engine,是ZeroC公司开发的一款用于分布式编程的框架。...

    ice安装包 for windows.zip

    《ICE for Windows安装包详解及应用》 ICE(Integration and Communication Engine)是一种高性能、轻量级的中间件...通过深入学习和实践,开发者可以充分利用ICE的强大功能,解决复杂的应用场景中的通信和集成问题。

    ICE学习资料 中英文双语

    ICE(Integrated Cloud Environment)是一种分布式系统框架,专为构建大规模、高性能、高可用的应用程序而设计。这个学习资料包提供了全面了解和掌握ICE技术的宝贵资源,包括英文原版文档和对应的中文翻译版本,这...

    Ice-3.5.1.zip

    Ice-3.5.1是其在201X年发布的一个稳定版本,包含了丰富的功能和改进,对于学习和应用分布式系统开发具有重要的价值。本文将深入探讨Ice-3.5.1的核心特性、主要组件以及源码分析。 一、Ice的核心特性 1. 跨语言支持...

    android连接ICE服务

    文档`android连接ICE步骤.docx`可能包含了更详细的步骤和示例代码,建议结合该文档进一步学习。在实际开发中,确保对ICE的API有深入理解和熟悉,同时考虑到Android的多线程模型,合理安排网络操作,避免阻塞UI线程。...

    利用ICE通信中间件构建分布式应用程序开发框架

    ICE的学习曲线比较短,很容易上手只要你熟悉某一种语言(例如C++或Java),了解了ICE编程范式之后,很快就能开发出实际的应用。ICE提供了一种在网络带宽、内存使用和CPU开销方面都很高效的实现。同时,ICE还提供了一...

    ICE入门 文章集

    总的来说,这些文章涵盖了ICE的各个方面,从基础到高级,从理论到实践,为初学者提供了全面的学习资源,同时也为有经验的开发者提供了深入了解和优化ICE应用的思路。通过学习这些材料,读者将能够掌握ICE的关键技术...

    zeroc ICE 3.3.1文档

    ### 分布式编程与ICE 3.3.1:关键知识点概述 #### 一、ICE 3.3.1 概览 - **版本信息**:文档为ICE 3.3.1版本,包含了IceTouch 1.0的相关内容。 - **发布时间**:此文档修订版发布于2009年7月。 - **版权所有**:...

    ZeroC Ice3.7 官方手册英文版加注中文书签

    ### ZeroC Ice 3.7 官方手册知识点解析 #### 一、Ice 手册概览 ...通过以上内容的详细介绍,可以看出ZeroC Ice 3.7 手册覆盖了从基本概念到高级应用的各个方面,为开发者提供了全面而深入的学习资源。

    ICE 的聊天demo 含有ICE的配置文档

    5. **ICEChatClient**:这个可能是客户端应用程序的源代码目录,包含与服务器交互的代码,调用由Chat.ice定义的接口来发送和接收消息。 6. **Debug**:这是一个目录,通常在编译过程中用于存放调试版本的输出文件,...

Global site tag (gtag.js) - Google Analytics