`
yidianfengfan
  • 浏览: 124214 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
对于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: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. 有用的属性:
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

分享到:
评论

相关推荐

    Zeroc_ICE学习大全

    中文教程、微服务架构入门、权威指南、应用配置手册、快速入门、3.7.0源码资源

    ZeroC Ice权威指南

    , 与很多技术类书籍不同的是,《ZeroC Ice权威指南》不是简单地罗列知识点和简单代码,而是在指导学习的过程中,不断抛出一些高质量代码,如客户端封装、服务端框架、服务调用拦截监控等可立即应用于生产的代码,...

    ice分布式应用开发中文手册

    • 提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发。 • 避免不必要的复杂性,使平台更易于学习和使用。 • 提供一种在网络带宽、内存使用和 CPU 开销方面都很高效的实现。 • 提供一种具有内建安全...

    ICE讲座资料,包括PPT和C++源程序

    利用ICE通信中间件构建分布式应用程序开发框架 1.什么是ICE? ICE,夏天我最容易想的是冰激淋 : -- ) 在这里我们要讲的可不是冰激淋,而是一种用于分布式程序设计的网络通信中间件ICE(Internate Communications Engine)...

    中间件ICE中文文档手册

    Internet Communications Engine,简称Ice。其主要设计目标是: 1.提供适用于异种环境的面向对象...更简单地说,Ice的设计目标可陈述为:"让我们构建与CORBA 一样强大的中间件平台,而又不去犯CORBA 所犯下的任何错误"。

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

    版本有点老,但是拿来学习没问题; 而且其他人不是描述不清,就是分太高

    ICE分布式程序设计

    ICE提供适用于异种环境的面向对象中间件平台。 • 提供一组完整的特性,支持广泛的领域中的实际的分布式应用的开发。 • 避免不必要的复杂性,使平台更易于学习和使用。 • 提供一种在网络带宽、内存使用和 ...

    ice:全面的RPC框架,支持C ++,C#,Java,JavaScript,Python等

    通过处理与底层网络编程接口的所有交互,Ice使您可以将精力集中在应用程序逻辑上。 使用Ice时,无需担心细节,例如打开网络连接,对数据进行序列化和反序列化以进行网络传输,或重试失败的连接尝试(仅举几例这样的...

    chantilly::soft_ice_cream:用于在线机器学习模型的部署工具

    简单: chantilly基本上只是一个Flask应用程序。 直截了当:您提供了一个模型, chantilly提供了一些API路由来完成其余的工作。 方便: chantilly赶走你的存储预测和学习步骤之间功能的负担。 灵活:只要使用...

    2021大数据计算(边缘计算+实时计算+计算架构等)资料合集-共34份.zip

    硬实时计算加速机器学习应用规模化落地 基于DorisDB构建实时数据仓库 FlinkSQL在实时维度建模中的应用 基于参数服务器的高性能分布式图计算框架 端边云全场景的AI计算框架 预训练模型和图计算的实践应用 AI计算服务...

    DataFunSummit2022:大数据计算架构峰会PPT合集(47份).zip

    Apache Iceberg 批流一体的实践 Apache Doris 极速1.0版本解析与未来规划 Apache Flink 流批一体的规划和进展 大数据弹性云的方案演进 电商零售大数据分析云上实战 工业需要什么样的边缘计算 埋点数据流建设与...

    Android应用程序开发原码例子

    Google于2007年11月05日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。它采用软件堆层(Software Stack,又名软件叠层)的架构,主要...是广大爱好者学习过程。

    QCon 2023全球软件开发大会广州站(公开)PPT汇总(47份).zip

    EB 级 Iceberg 数据湖的机器学习应用与优化 云原生时序数据库的挑战和架构设计 下一代微服务架构的实践与探索 大数据平台出海上云架构设计与实践 探索软件开发新工序:LLM 赋能研发效能提升 ……等等。

    Android 教学实验箱 CES-EDU210B

    理论与实践的结合,透过详尽的实验例程,更深层次、系统化的学习Android系统的相关技术,从系统架构介绍、开发环境搭建,再到系统到平台的移植,应用软件的开发,整个课程系统采用由浅及深、循序渐进的学习模式,...

    HarmonyOS 鸿蒙应用开发 例1-任务进度管理程序

    对于ArkUI框架本身,你需要学习框架提供的装饰器、组件、状态管理等核心概念。理解@State、@Styles、@Extend、@Builder等装饰器的作用和使用方法,学会如何定义和使用组件,以及如何管理组件内的状态。实践是巩固所...

    单片机 80C51 51单片机 单片机课件 单片机教材

    通过对基本概念和单片机的发展与特点的介绍,使学生建立起对单片机和单片机应用系统的开发过程有全面的认识,激发学生学习单片机的学习信心和兴趣。 教学内容: 1.单片机概述 2.单片机的发展 3.单片机的应用 4....

    nhl-fantasy-helper:小型应用程式,适合NHL幻想玩家

    学习React 使用Sass重新学习样式让我的梦想成真,创造出与曲棍球有关的东西,尤其是与NHL有关的东西 开始项目 在项目目录中,可以运行: yarn start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您...

Global site tag (gtag.js) - Google Analytics