ICE introduction to programmin

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ICE introduction to programmin相关的知识,希望对你有一定的参考价值。

ICE客户端与服务器架构详解

一、客户端与服务器架构

Ice 客户与服务器内部的逻辑结构如下图所示:

技术分享

客户与服务器都由这样一些代码混合而成:应用代码、库代码、根据Slice 定义生成的代码:

?  Ice 核心为远地通信提供了客户端和服务器端运行时支持。其中的大量代码所涉及的是网络通信、线程、字节序,以及其他许多与网络有关的问题,我们的应用代码应该与这些问题隔离开来。

?代理代码是根据你的Slice 定义生成的。如果你调用代理的某个函数,就会有一个RPC 消息被发给服务器,调用服务端目标对象上的某个对应的函数。

 在上文中提到,如下客户代码中,PrinterPrx代理类是由slice2java命令编译printer.ice文件生成的;

Ice.ObjectPrx base = ic.stringToProxy("SimplePrinter:default -p 10000");
PrinterPrx printer = PrinterPrxHelper.checkedCast(base);
printer.printString("Hello World!");
当调用printer代理中的printString方法,客户会发送RPC消息,调用服务器上PrinterI类对象中的printString方法。

 当客户调用代理上的操作时,Ice run time 会:

  1. 定位Ice 对象
  2. 如果Ice 对象的服务器没有运行,就激活它
  3. 在服务器中激活Ice 对象
  4. 把所有in 参数传送给Ice 对象
  5. 等待操作完成
  6. 把所有out 参数及返回值返回给客户(或在发生错误的情况下抛出异常)代理封装了完成这一系列步骤所必需的全部信息。特别地,代理包含有:

    ?寻址信息:用于让客户端run time 联系正确的服务器;

    ?对象标识:用于确定服务器中的哪一个对象是请求的目标;

    ? 可选的facet 标识符:用于确定代理所引用的是对象的哪一个facet;

    ? 骨架代码也是根据你的Slice 定义生成的,因此,与你用Slice 定义的对象和数据的类型是对应的。骨架代码是客户端代理代码的服务器端等价物:它提供了向上调用接口,允许Ice runtime 把控制线程转交给你编写的应用代码。

    ? 对象适配器是专用于服务器端的Ice API 的一部分:只有服务器才使用对象适配器。对象适配器有若干功能:

    1、对象适配器把来自客户的请求映射到servant对象上的特定方法。换句话说,对象适配器会跟踪在内存中,都有哪些servant,其对象标识又是什么。对象适配器与一个或多个传输端点关联在一起。

        servant就是服务器开发者编写的类,客户端发送的请求,最终调用的是servant实例上的方法。

    如上文中的服务端代码片段,Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter""default -p 10000");端点“default -p 10000”与adapter适配器绑定,串“SimplePrinterAdapter”代表适配器的名称。

      如果与某个适配器关联的传输端点不止一个,你可以通过多种传输机制到达在该适配器中的servant。例如,为了提供不同的服务质量和性能,你可以把一个TCP/IP 端点和一个UDP 端点与一个适配器关联在一起。

        2、对象适配器要负责创建可以传给客户的代理。对象适配器知道它的每个对象的类型、标识,以及传输机制的详细情况,并且会在服务器端应用代码要求创建代理时在其中嵌入正确的信息。

        每个对象适配器都维护有一个叫作活动servant 映射表(active servant map)的数据结构。活动servant 映射表(简称为ASM)是一个查找表,用于把对象标识映射到servant。

        当客户把操作调用发给服务器时,请求的目标是特定的传输端点。传输端点隐含地标识了请求所针对的对象适配器(因为同一个端点只能绑定到一个对象适配器)。客户藉以发送请求的代理含有对应的对象的标识,客户端run time 会在线路上随调用一起发送这个对象标识。对象适配器继而使用这个对象标识、在它的ASM 中查找正确的servant,把调用分派给它。

     技术分享

     

以上是关于ICE introduction to programmin的主要内容,如果未能解决你的问题,请参考以下文章

Introduction to Unity UI

Gilbert Strang 《Introduction to Linear Algebra》 chap1 Introduction to Vectors 笔记

MATH10282 Introduction to Statistics

ITI 1121. Introduction to Compute

Introduction to Paging

W4111 -- Introduction to Databases