ZeroC ICE的遠端呼叫框架 Slice如何幫助我們進行Ice非同步程式設計(AMI,AMD)

weixin_30924079發表於2020-04-04

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。

轉載於:https://www.cnblogs.com/bbqzsl/p/6612102.html

相關文章