RMI介绍

RMI(Remote Method Invocagion),即远程方法调用,可以认为是RPC的Java版本。RMI可以说是RPC的一种具体形式,其原理与RPC基本一致,唯一不同的是:RMI是基于对象的,充分利用面向对象的思想去实现整个过程,其本质就是一种基于对象的RPC实现。RMI使用的是JRMP(Java Remote Messaging Protocol)。由于JRMP是专门为Java定制的通信协议,所以它是纯Java的分布式解决方案,在JDK 1.2中引入了Java体系。在应用比较小、性能要求不高的情况下,使用RMI更为方便快捷。随着Python语言的流行,现在已经有支持Python语言的RMI实现,例如Pyro4。

在面向对象的系统中,对远程方法调用使用这样一种机制可以在项目的统一性和对称性上获得很多优势,因为这样做可以复用在同一应用的不同对象或方法之间调用的模型。

Python调用RMI

前面我们提到,Pyro4是一个纯Python代码实现的分布式对象系统,与早年的CORBA系统有着很强的相似性,不过它只支持Python的客户端和服务器端。

与RPC类似,使用Pyro4可以调用一个远程对象(存在于另一个进程中,甚至另一台机器上),就像调用本地对象一样(处于与调用者相同的进程)。

Pyro4用客户端-服务器的方式来管理和分发对象。Pyro4可以将客户端调用转换为远程对象调用。在调用过程中,有两个重要的角色,一个是客户端,另一个是服务客户端调用的服务器。Pyro4以分布式的形式提供这种服务。