RMI注册表是什么:
RMI注册表是一个服务,远程对象在其中注册,RMI客户端查找已注册的远程对象。如果您希望您的对象可以远程访问(可能有很多原因,例如您不断更新逻辑而无法每次都将其发送到实现中,因此通过RMI允许远程调用),则在RMI注册表中注册它,然后RMI客户端将查找远程对象(使用对象的远程引用),然后可以调用远程对象上的方法。
以下是来自Oracle Javadoc的注册表定义
注册表是一种将名称映射到远程对象的远程对象。服务器使用注册表向其注册远程对象,以便可以查找它们。当对象想要调用远程对象的方法时,它必须首先使用名称查找远程对象。注册表返回对远程对象的引用给调用对象,使用该引用可以调用远程方法。
RMI服务器是什么:
RMI服务器是实际运行JVM和对象(远程对象)的服务器。RMI客户端最终需要这个对象。
就您的问题而言,是的,此服务器(RMI服务器)可以与运行RMI注册表的服务器不同。您可以理解为什么!我可以在同一RMI注册表中从不同的服务器注册对象,并且可以在完全不同的服务器上运行该注册表。请阅读下面的更多解释。
Java RMI客户端如何联系远程Java RMI服务器?为了使Java RMI客户端联系远程Java RMI服务器,客户端必须首先持有对服务器的引用(这就是RMI注册表的作用,为您提供对RMI服务器的引用)。 Naming.lookup方法调用是客户端最初获取对远程服务器引用的最常见机制。
每个远程引用都包含一个服务器主机名和端口号,允许客户端定位为特定远程对象提供服务的VM。一旦Java RMI客户端拥有远程引用,客户端将使用引用中提供的主机名和端口来打开到远程服务器的套接字连接。
请务必阅读同一Oracle常见问题解答中的
this。
您可以很好地连接RMI注册表,但可能无法获取远程对象,这就是人们报告java.net.UnknownHostException的原因,这意味着RMI注册表能够提供远程对象的引用,但实际上托管远程对象或运行对象所在JVM的RMI服务器未找到或客户端无法连接。
因此,RMI注册表和RMI服务器是两个不同的东西。
一个类比可以是HTTP服务器用于提供对服务器上可用的HTTP资源(超文本文档)的访问。然而,通常超文本文档将位于与HTTP服务器相同的物理框中,但是RMI注册表可以提供对位于不同服务器上(RMI服务器)的远程对象的引用的访问。