远程方法调用(RMI)
RMI 需要 3 个组件:客户端,服务器和共享远程接口。共享远程接口通过指定服务器必须实现的方法来定义客户端 - 服务器合同。接口必须对服务器可见,以便它可以实现方法; 接口必须对客户端可见,以便它知道服务器提供哪些方法(服务)。
实现远程接口的任何对象都注定要扮演服务器的角色。因此,服务器也可以调用客户端中的方法的客户端 - 服务器关系实际上是服务器 - 服务器关系。这称为*回调,*因为服务器可以回叫客户端。考虑到这一点,可以使用指定客户端来实现这样的服务器。
共享远程接口是任何扩展 Remote
的接口。充当服务器的对象经历以下操作:
- 通过扩展实现
Remote
的UnicastRemoteObject
,显式或隐式实现共享远程接口。 - 导出,如果它扩展
UnicastRemoteObject
,或者通过传递给UnicastRemoteObject#exportObject
显式导出。 - 在注册表中绑定,可以直接通过
Registry
或间接通过Naming
。这只是建立初始通信所必需的,因为可以通过 RMI 直接传递更多存根。
在项目设置中,客户端和服务器项目完全不相关,但每个项目都在其构建路径中指定共享项目。共享项目包含远程接口。