在Ice有两种异步使用的方式,AMI和AMD.AMI是异步方法调用,AMD是异步方法调度(分派).前者用在代理端,后者用在饲服实现端. AMI其实就是在代理端,使用Future机制进行异步调用,而不阻塞等待响应结果. AMD只是提供一种回调机制,让你可以选择返回响应的时机,不必在Skeleton调度(分派)你的方法调用最后返回响应,这样你可以制造一个barrier让一组响应同时返回.或者在你的方法实现中要依赖代理远程调用时,组合这个代理AMI方式,让你的响应操作在AMI完成事件回调处执行,这点是…
Slice最大的用处就是为我们使用Ice进行编程,代劳绝大部分的重复性代码,并提供一些帮助性的框架代码,如用于AMI和AMD方式进行异步编程的回调框架. 当Slice不为我们生成代码时,我们仍然可以按照Ice规范进行开发,但重复性细节代码很多.我们在进行一次远程调用时,调用方和执行方必要的代码如下: Slice为我们生成的AMI 异步方法调用的回调框架代码有: 我们在使用AMD 异步方法调度(分派)进行对象的后端编程时,使用到的回调框架代码,Slice为我们生成的代码: Slice只是为我们提供…
继上一篇<ZeroC ICE的远程调用框架>,本篇再来说其中的AMD.(本篇需要重写) 当在ice文件中声明某个接口方法Method为["amd"]后,接口方法在stub类生成的远程调用框架代码不会变,但在skeleton类生成的就不是_iceD_Method和Method,而是_iceD_Method和Method_async.而amd模式和非amd模式的代码生成模板区别在于,_iceD_Method调用Method_async代替Method,并且在调用后不进行out方…
想搞清楚slice为我们生成了什么样的框架代码,就先搞明白Ice的远程调用框架暗中为我们做了些什么? Ice将Ice Object的方法调用分为三个阶段(或步骤),分别是begin,process和end.如下图: 或者说Ice将一次完整的Ice Object方法调用划分成上面三个阶段.基于上面的划分,又将三个阶段应用到远程调用中.其中将begin和end阶段应用在Object Proxy端,而process阶段应用在Object Servant端.远程调用实质在应用ActiveObject模式…
Ice框架提供了不少回调设施,其中一些是使用Ice远程调用进行ami模式或amd模式的支撑.本篇来看一下用于代理端的回调设施. Ice代码中有好几个Callback相关命名的基类,并且slice还会为你描述的接口,每个接口方法生成好几个回调类,让人眼花缭乱.其实认真整理归纳一下,就会发现,为我们提供的代理调用回调接口只有两个,一个是较为底层一点的,你需要解释Future,另一个是较为高级一点的,框架为你解释好Future,并以输出参数回调.而回调的挂接点是在网络层的io读写完成事件.较为底层一点…
我们在ice文件中定义的class或interface,slice都会为我们生成stub存根类和skeleton骨架类.在这里要注意slice并没有分别生成两份单独用在客户端或服务端的接口给开发分发.在ice中,client和server只是相对于ice object的使用关系,client即使用代理远程调用ice object的一方,server相对就是为ice object提供执行servant的一方.并非我们传统意义上的c/s结构中的client和server.ice object既可以存…
ServantLocator定位的目标是Servant,而Locator定位的目标是“Ice Object”,即一个可定位的“Ice Object”代理.Servant是::Ice::Object的继承树的子类,是我们接口定义的实现体,充当的是"Ice Object"某面(facet)的Servant. ServantLocator的同一级物品是ASM(active servant map),是一次远程调用的服务端ObjectAdapter在分派调用而要适配Servant时使用到的.而…
ThreadPool提供Reactor/Proactor服务,并且强偶合了Reactor(反应器)/Proactor(前摄器).不同于Reactor/Proactor使用线程池 进行事件处理的设计.如ACE框架的ACE_TP_Reactor.同时ThreadPool提供一个共享的工作分派队列,可以用作Half-Async/Half-sync并发模式的线程池. ThreadPool为池中每个线程定制了一至的线程循环,运行在池中的线程者必须进行这个循环,接受线程池的统一控制.此外ThreadPool…
在官方文档中称为Binding,协议-地址对的绑定.在Proxy模式中,一般地有三个参与者,Proxy,Subject以及RealSubject.Subject定义了Proxy(代理)和RealSubject(实体)的公 共接口,Proxy包含一个对RealSubject的引用,客户通过调用Proxy,由Proxy通过引用对RealSubject进行调用.一般地这个引用是一 个本地RealSubject的指针,而在Remote Proxy模式中这个引用通常包含RealSubject所在的主机位置…
ASM与defaultServant,ServantLocator都是与调用调度(Dispatch)相关的. ASM是ServantManager中的一张二维表_servantMapMap,默认Servant则由_defaultServantMap和_locatorMap两张一维表维护.一个对 象可由这样的字符串指定"Category/Identity -f Facet".ASM是根据Identity和Facet对进行查找,而defaultServant和 ServantLocator…