Slice最大的用处就是为我们使用Ice进行编程,代劳绝大部分的重复性代码,并提供一些帮助性的框架代码,如用于AMI和AMD方式进行异步编程的回调框架。

当Slice不为我们生成代码时,我们仍然可以按照Ice规范进行开发,但重复性细节代码很多。我们在进行一次远程调用时,调用方和执行方必要的代码如下:

Slice为我们生成的AMI 异步方法调用的回调框架代码有:

我们在使用AMD 异步方法调度(分派)进行对象的后端编程时,使用到的回调框架代码,Slice为我们生成的代码:

Slice只是为我们提供了回调的框架,帮我们打包了回调操作,但并没有使我们的调用或分派调度直接变成异步,调用或分派调度如何异步还是要我们自己进行编程。

更多AMI 和 AMD 回调详细请参看前面的篇

ZeroC ICE的远程调用框架 Callback(一)-AMI异步方法调用框架

ZeroC ICE的远程调用框架 AMI与AMD -Why?

看了Slice生成的c++代码,再比较一下Slice在java中如何帮助进行AMD编程:

    void op(com.zeroc.Ice.Current current);

    java.util.concurrent.CompletionStage<Void> opAMDAsync(com.zeroc.Ice.Current current);

   static java.util.concurrent.CompletionStage<com.zeroc.Ice.OutputStream> _iceD_op(Intf obj, final com.zeroc.IceInternal.Incoming inS, com.zeroc.Ice.Current current)
{
com.zeroc.Ice.Object._iceCheckMode(null, current.mode);
inS.readEmptyParams();
obj.op(current);
return inS.setResult(inS.writeEmptyParams());
} static java.util.concurrent.CompletionStage<com.zeroc.Ice.OutputStream> _iceD_opAMD(Intf obj, final com.zeroc.IceInternal.Incoming inS, com.zeroc.Ice.Current current)
{
com.zeroc.Ice.Object._iceCheckMode(null, current.mode);
inS.readEmptyParams();
return inS.setResultFuture(obj.opAMDAsync(current));
}

Slice在java中直接使用了ResultFuture。

再来看一下python:

        def op(self, current=None):
pass def opAMD(self, current=None):
pass

Slice根本不会为python语言生成额外的AMD相关的代码,你必须在方法的实现体中自行使用Ice.Future。

ZeroC ICE的远程调用框架 Slice如何帮助我们进行Ice异步编程(AMI,AMD)的更多相关文章

  1. ZeroC ICE的远程调用框架

    想搞清楚slice为我们生成了什么样的框架代码,就先搞明白Ice的远程调用框架暗中为我们做了些什么? Ice将Ice Object的方法调用分为三个阶段(或步骤),分别是begin,process和e ...

  2. ZeroC ICE的远程调用框架 AMD

    继上一篇<ZeroC ICE的远程调用框架>,本篇再来说其中的AMD.(本篇需要重写) 当在ice文件中声明某个接口方法Method为["amd"]后,接口方法在stu ...

  3. ZeroC ICE的远程调用框架 AMI与AMD -Why?

    在Ice有两种异步使用的方式,AMI和AMD.AMI是异步方法调用,AMD是异步方法调度(分派).前者用在代理端,后者用在饲服实现端. AMI其实就是在代理端,使用Future机制进行异步调用,而不阻 ...

  4. ZeroC ICE的远程调用框架 Callback(一)-AMI异步方法调用框架

    Ice框架提供了不少回调设施,其中一些是使用Ice远程调用进行ami模式或amd模式的支撑.本篇来看一下用于代理端的回调设施. Ice代码中有好几个Callback相关命名的基类,并且slice还会为 ...

  5. ZeroC ICE的远程调用框架 class与interface

    我们在ice文件中定义的class或interface,slice都会为我们生成stub存根类和skeleton骨架类.在这里要注意slice并没有分别生成两份单独用在客户端或服务端的接口给开发分发. ...

  6. ZeroC ICE的远程调用框架 ServantLocator与Locator

    ServantLocator定位的目标是Servant,而Locator定位的目标是“Ice Object”,即一个可定位的“Ice Object”代理.Servant是::Ice::Object的继 ...

  7. ZeroC ICE的远程调用框架 ThreadPool

    ThreadPool提供Reactor/Proactor服务,并且强偶合了Reactor(反应器)/Proactor(前摄器).不同于Reactor/Proactor使用线程池 进行事件处理的设计.如 ...

  8. ZeroC ICE的远程调用框架 代理引用地址

    在官方文档中称为Binding,协议-地址对的绑定.在Proxy模式中,一般地有三个参与者,Proxy,Subject以及RealSubject.Subject定义了Proxy(代理)和RealSub ...

  9. ZeroC ICE的远程调用框架 ASM与defaultServant,ServantLocator

    ASM与defaultServant,ServantLocator都是与调用调度(Dispatch)相关的. ASM是ServantManager中的一张二维表_servantMapMap,默认Ser ...

随机推荐

  1. html简介(1)

    HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标记语言

  2. insert into select 引起的 "子查询返回的值不止一个。当子查询跟随在**之后,或子查询用作表达式时,这种情况是不允许的"

    目录 1.事故现场 1.1 在使用 Insert into Table2 select * from Table1 将表1的数据插入到表2时,报错如下: 1.2 sql 语句 2.推测 3.解决方案 ...

  3. javascript学习 first-day

    1.javascript是一种客户端语言,设计它的目的是在用户的机器上而不是服务器上执行任务. 1.1 javascript不允许写服务器机器上的语言:   1.2 Javascript不能关闭不是由 ...

  4. < Window10更新后VWwareWorkstationPro无法运行(显示更新至新版本) >

    < Window10更新后VWwareWorkstationPro无法运行(显示更新至新版本) > 问题描述 我的Win10在国庆节后更新了微软发布的新补丁,由于当前正在上操作系统课,用到 ...

  5. GStreamer基础教程11 - 与QT集成

    摘要 通常我们的播放引擎需要和GUI进行集成,在使用GStreamer时,GStreamre会负责媒体的播放及控制,GUI会负责处理用户的交互操作以及创建显示的窗口.本例中我们将结合QT介绍如何指定G ...

  6. FormData交互以及Node multiparty插件的使用

    一.FormData FormData是ajax2.0里面添加的新特性. FormData的主要用途有两个: (1).将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表 ...

  7. Spring Boot 日志处理你还在用Logback?

    ▶ Log4j2 性能 https://logging.apache.org/log4j/2.x/performance.html ▶ Spring Boot 依赖与配置 Maven 依赖 <! ...

  8. 不用循环控制、条件控制、三目运算符 实现阶乘n!

    long func(int n) { ( n <= 1 && (n=1) ) || ( n*=func(n-1)); return n; } template<int N& ...

  9. Java IO编程——转换流

    所谓的转换流指的是可以实现字节流与字符流操作的功能转换,例如:进行输出的时候OutputStream需要将内容变为字节数组后才可以进行输出,而Writer可以直接输出字符串,这一点是方便的,所以很多人 ...

  10. 学习笔记26_MVC前台强类型参数

    *一般在MVC中,aspx后台要往前台传递参数,使用ViewData["Key"] = obj; 前台就要 <%=(ViewData["key"] as ...