Ice笔记---Ice run time详述(一)

1.Ice Run Time 概述

   按照个人暂时的理解,Icerun Time具体是指Ice封装好了大部分的API,通过这些API实现分布式应用程序运行时的各种功能。

   首先,其中一个重要的部分是通信器,它是Ice run time的主句柄,也是Ice run time的主进入点。另外Ice一个重要的机制是servant定位器,用于控制性能和内存消耗之间的平衡。其他一些同样不可缺少的组成部分接下来将会进行介绍。

 

2.通信器

  Icerun time 的主进入点由本地接口Ice::Communicator 表示。Ice::Communicator 的一个实例与一些运行时资源是关联在一起的:

1)  客户端线程池:确保客户端至少有一个线程可用于接受对未完成请求的答复处理。同时它可用于异步方法调用(AMI)。

2)  服务端线程池:负责接收到来的连接,并处理来自客户的请求。可用于异步分派(AMD)。

3)  配置属性:配置Icerun time的各方面属性。每个通信器有各自的属性集。

4)  对象工厂:实例化从已知基类继承而来的servant类。

5)  一个日志记录器对象:确定日志消息的处理方式。实现了Ice::Logger接口。

6)  一个统计对象:打印一些通信流量消息等。实现了Ice::Stats接口。

7)  一个缺省路由器:实现了Ice::Router接口。Glacier使用它实现了Ice的防火墙功能。

8)  一个缺省定位器:用于把对象标识解析为代理的对象。IcePack用于构建定位服务。

9)  一个插件管理器:用于给通信器增加特性的对象。ICESSL被实现为插件。

10)      对象适配器:负责分配到来的请求,并把请求分配给相应的servant处理。下一小节将会具体介绍。

 

通信器提供了一些操作:

1)      proxyToString , stringToProxy:这两个操作将代串化,或者相反。

2)      createObjectAdapter ,createObjectAdapterWithEndpoints:创建新的对象适配器。

3)      shutdown:关闭服务端的Icerun time

4)      waitForShutdown:挂起发出调用的线程,直到通信器关闭为止。

5)      destroy:销毁通信器及相关资源,例如线程,通信端点以及内存资源。

 

3.对象适配器

   3.1概述

   一个通信器含有一个或者多个对象适配器。对象适配器处在Ice run time和服务器之间的界线上,负责;

1)      把ice对象映射到到来请求的servant,并把请求分配给相应servant对象来处理。

2)      协助进行生命周期操作,避免出现Ice对象和servan的建立与销毁时出现冲突。

3)      提供一个或者多个传输端点。每个适配器有一个或多个servant。

   3.2 活动Servant映射表

 每个对象适配器都维护有一个叫做活动servant映射表(ASM: Active Servant Map)。活动表的作用可以用一下这图表示:


因此它的功能可以描述为:把请求绑定到相应的正确的servant。图中示例用了直接代理,它将传输端点嵌在了代理中。

 

  3.3)Servant激活与解除激活

  激活的意思是指:向Ice run time告知某个ice对象的servant的存在。具体操作就是将servant对象指针添加到ASM表中。

  与之相反的操作叫做接触激活。这些操作在接口中定义为:

module Ice {

    local interface ObjectAdapter {

        // ...

        //add:把一个具有标志的servant增加到ASM中,返回值是这Servant体现的对象的代理

        Object* add(Object servant,Identity id);  

      //addWithUUID:和add相似,不过程序会自动添加Ice对象的标识;可以通过ice_getIdentity来获取该对象代理

        Object* addWithUUID(Object servant);

       //从ASM中解除相应的servant条目

        void remove(Identity id);

        // ...

    };

}; 

 3.)适配器的状态:

  a)activate:活动状态,适配器可以进行连接过来的请求的分派工作。

  b)hold:扣留状态,此时到达过来的请求会被扣留,不会被分派到相应的servant处理。

          发出调用的线程会立即返回,不会等待操作完成。

  c)waitForHold:挂起发出调用的线程,直到适配器状态移到扣留状态。

  d)Deactivate:之后到达的请求会被拒绝,但正在执行的请求可以完成。

  e)WaitForDeactivate:挂起发出调用的线程,直到适配器迁移到Deactivate状态为止。


参考资料:《Ice1.3.0(马维达 译)》和《Ice3.4.2 Manual》


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值