我读了很多关于 ICE 或 Corba 等技术中使用的仆人和对象的文章。有很多资源我可以读到这样的东西:
一个仆人可以处理多个对象(为了节省资源)。一个对象可以由多个仆人处理(为了可靠性)。
有人可以告诉我这两个陈述的真实例子吗?
如果我没记错的话,这个术语是 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 访问。
多个对象的一个仆人是例如银行,每个银行帐户都是一个对象,但在这种情况下,您不希望每个银行帐户在内存中都有一个仆人,因此所有银行帐户都有一个仆人。
由多个仆人处理的一个对象用于负载平衡和容错之类的事情。客户不知道它是在哪一个上执行的。