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

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。

posted on 2017-03-24 16:25  bbqz007  阅读(555)  评论(0编辑  收藏  举报