5

我读了很多关于 ICE 或 Corba 等技术中使用的仆人和对象的文章。有很多资源我可以读到这样的东西:

一个仆人可以处理多个对象(为了节省资源)。一个对象可以由多个仆人处理(为了可靠性)。

有人可以告诉我这两个陈述的真实例子吗?

4

2 回答 2

5

如果我没记错的话,这个术语是 Douglas Schmidt 在他描述通用对象请求架构的论文中创造的。

这是几个定义的直接引用:

  • 注:为清楚起见,请参见下图

对象——这是一个 CORBA 编程实体,由身份、接口和实现组成,称为仆人。

仆人——这是一个实现编程语言实体,它定义了支持 CORBA IDL 接口的操作。Servant 可以用多种语言编写,包括 C、C++、Java、Smalltalk 和 Ada。

CORBA IDL 存根和骨架——CORBA IDL 存根和骨架分别充当客户端和服务器应用程序与 ORB 之间的“粘合剂”

ORB接口——一个 ORB 是一个逻辑实体,可以以各种方式实现(例如一个或多个进程或一组库)。为了将应用程序与实现细节分离,CORBA 规范为 ORB 定义了一个抽象接口。该接口提供了各种帮助函数,例如将对象引用转换为字符串,反之亦然,以及为通过下面描述的动态调用接口发出的请求创建参数列表。

科尔巴

通用对象请求代理体系结构 (CORBA) 是由对象管理组 (OMG) 定义的标准,旨在促进部署在不同平台上的系统的通信。CORBA 支持不同操作系统、编程语言和计算硬件上的系统之间的协作

因此,有客户端、服务器、客户端和服务器代理以及 ORB 核心。客户端和服务器使用代理通过 ORB 核心进行通信,它提供了一种将客户端请求透明地传送到目标对象实现的机制。从客户端的角度来看,这使得对远程对象的调用看起来像是在本地地址空间中的对象,因此简化了分布式环境中客户端的设计。

综上所述,Servant 是一种实现,它是远程客户端调用的调用目标,并且正在抽象作为实际目标的远程对象。

至于您的问题,一个仆人可以处理对由仆人封装的多个分布式对象的调用。请注意,客户端不会直接访问这些对象,而是通过 Servant 访问。

在此处输入图像描述

于 2015-07-02T06:54:46.373 回答
1

多个对象的一个​​仆人是例如银行,每个银行帐户都是一个对象,但在这种情况下,您不希望每个银行帐户在内存中都有一个仆人,因此所有银行帐户都有一个仆人。

由多个仆人处理的一个对象用于负载平衡和容错之类的事情。客户不知道它是在哪一个上执行的。

于 2015-07-02T06:34:00.940 回答