从新学习ICE

本文介绍了在Visual C++ 6.0环境中配置ICE的过程及遇到的问题解决方法,详细解释了ICE中的关键概念,如Servant、代理、Ice对象、骨架和对象适配器等,并展示了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近忙一个项目,初步计划用ICE实现CS模式下的函数调用。半年没有使用ICE了,现在又从新开始,发现不熟悉的东西还是很多。

由于以前是在C#环境下使用,感觉环境配置等相关操作不是很麻烦,但是这次是在VC6下。感觉还是有些麻烦。

首先导入Include,src,bin等文件夹以后还是提示STLPort类似的问题,参考了zeroc的论坛和安装后解开的目录下的Readme文件后才知道是include文件夹的导入顺序有问题,readme文档中提示说要求ice自带的include文件夹的顺序要在所有文件夹之前。

原来如此~

虽然Ice真正使用的东西不多,但是它的有些概念需要好好弄弄明白。

比如:

servant——在服务器端提供操作调用的行为的制品叫作servant。一个servant 提供一个或多个Ice 对象的实质内容(或体现这些对象, incarnate)。实际上,servant 就是服务器开发者编写的类的实例,这些类作为一个或多个Ice 对象的servant、向服务器端run time 进行注册。

代理(Proxies)——要想与某个Ice 对象联系,客户必须持有这个对象的代理1。 代理是客户的地址空间中的一种制品(artifact);对客户而言,代理就是Ice 对象的代表(该对象可能在远地)。一个代理充当的是一个Ice 对象的本地大使

Ice 对象(Ice Objects)——Ice 对象是一种概念性的实体(或称抽象)。Ice 对象是本地或远地的地址空间中、能响应客户请求的实体。

有点晕,别急,看看代码再看看下图,就知道咋回事了:

代理代码是根据你的Slice 定义生成的,因此,与你用Slice 定义的对象和数据的类型是对应的。

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

其中,所谓骨架和代理都是基于slice定义生成的,也就是根据用户编写的ice文件(*.ice)就可以得到。

对象适配器(object adapter)是专用于服务器端的Ice API 的一部分:只有服务器才使用对象适配器。对象适配器有若干功能:
• 对象适配器把来自客户的请求映射到编程语言对象上的特定方法。换句话说,对象适配器会跟踪在内存中,都有哪些servant,其对象标识又是什么。
• 对象适配器与一个或多个传输端点关联在一起。如果与某个适配器关联的传输端点不止一个,你可以通过多种传输机制到达在该适配器中的servant。例如,为了提供不同的服务质量和性能,你可以把一个TCP/IP 端点和一个UDP 端点与一个适配器关联在一起。
• 对象适配器要负责创建可以传给客户的代理。对象适配器知道它的每个对象的类型、标识,以及传输机制的详细情况,并且会在服务器端应用代码要求创建代理时在其中嵌入正确的信息。

从程序的角度来说,servant是服务器端真正实现的代码,也就是能提供客户端方法调用的代码。从服务器的体系结构图上看出,骨架是位于对象适配器上面的,对应于我们服务器中的代码就是通过适配器的add操作把骨架加入服务中,而适配器又位于Ice 核心上,表示适配器由Ice自身代码生成。

看看Server端的代码——的确如此~

再看看客户端,就简单多了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值