RMI服务器与RMI注册表

时间:2015-10-02 18:03:40

标签: java rmi distributed-computing

关于Java RMI的Oracle's FAQ page,它说:

  

Java远程方法调用(Java RMI)服务器可以   从理论上讲,它可以在任何主机上,它通常与主机上的主机相同   注册表正在运行,并在另一个端口上。即使是   服务器误认为其主机名或IP地址(或具有主机名   这根本不是客户可以解决的),它仍将导出所有   它的对象使用错误的主机名,但你会看到一个   每次尝试接收其中一个对象时都会出现异常。

我不明白RMI服务器和RMI注册表之间的区别。我以为他们是一回事。如果RMI注册表不是某种服务器,它如何工作?

4 个答案:

答案 0 :(得分:4)

什么是RMI注册表:

RMI注册表是一种服务,其中注册远程对象并由RMI客户端查找注册的远程对象。如果您希望远程访问您的对象(可能有很多原因,比如您继续更新逻辑并且每次都不可能发送到实现,那么允许通过RMI进行远程调用)然后将其注册到RMI注册表中,然后再注册RMI客户端将查找远程对象(使用对象的远程引用),然后可以调用远程对象上的方法。

以下是definition of registry from Oracle Javadoc

  

注册表是一个将名称映射到远程对象的远程对象。一个   服务器使用注册表注册其远程对象,以便它们可以   被抬头看当对象想要在远程上调用方法时   对象,它必须首先使用其名称查找远程对象。该   registry返回调用对象对远程的引用   对象,使用它可以调用远程方法。

什么是RMI服务器:

RMI服务器是运行JVM并且对象(远程对象)正在运行的实际服务器。 RMI客户端最终想要这个对象。

根据您的关注,是的,此服务器(RMI服务器)可能与运行RMI注册表的服务器不同。您可以理解为什么!我可以在同一个RMI注册表中注册来自不同服务器的对象,我可以在完全不同的服务器上运行该注册表。请阅读以下内容以获得更多解释。

Java RMI客户端如何联系远程Java RMI服务器?

要使Java RMI客户端联系远程Java RMI服务器,客户端必须首先保存对服务器的引用(这是RMI注册表所在的位置,以便您参考RMI服务器)。 Naming.lookup方法调用是客户端最初获取对远程服务器的引用的最常用机制。

每个远程引用都包含一个服务器主机名和端口号,允许客户端找到为特定远程对象提供服务的VM(这是RMI服务器进入图片的位置)。一旦Java RMI客户端具有远程引用,客户端将使用引用中提供的主机名和端口打开与远程服务器的套接字连接。

请从相同的Oracle常见问题解答中阅读this

您可以很好地连接RMI注册表,但是当人们报告java.net.UnknownHostException时,您可能无法获取远程对象,这意味着RMI注册表能够提供参考远程对象但实际上托管远程对象或运行对象所在的JVM的RMI服务器未找到或客户端无法连接。

因此,RMI注册表和RMI服务器是两回事。

类比可以是HTTP服务器用于提供对服务器上可用的HTTP资源(超文本文档)的访问。但是,通常超文本文档与HTTP服务器位于同一物理盒上,但RMI注册表可以提供对不同服务器(RMI服务器)上远程对象的引用的访问。

答案 1 :(得分:1)

RMI服务器是托管远程对象的程序。 RMI注册表是一个单独的程序,它将远程对象名称绑定到实例。 RMI服务器通过在注册表中注册远程对象使客户端可以访问远程对象;客户端然后通过相同的注册表获取访问权RMI注册表小写的“服务器”,但它通常不是“RMI服务器”。

RMI服务器和RMI注册表之间的关系类似于Web服务器和对其具有权威性的DNS服务器之间的关系。

也许甲骨文的getting started guide比常见问题解答更好。

答案 2 :(得分:1)

来自RMI Specification #2.4.3

  

RMI服务器功能由java.rmi.server.RemoteObject及其子类java.rmi.server.RemoteServerjava.rmi.server.UnicastRemoteObject以及java.rmi.activation.Activatable.

提供

我认为术语混乱且不必要。所有这些意味着每个远程对象都是服务器。最好只考虑远程对象。术语' RMI服务器'在RMI规范中出现两次,两次都明确指的是远程对象。

注册表也是一个远程对象。您获取远程对象作为远程方法的返回值。注册表解决了如何开始的引导问题。

与此相反,您引用的Oracle常见问题解答似乎正在使用术语“RMI服务器”。作为一种主持'远程对象:但是没有必要存在这样的程序。许多(如果不是大多数)远程对象只是托管'他们自己。将这样的程序描述为服务器只是滥用术语。

  

如果RMI注册表不是某种类型的服务器,它如何工作?

这是一个远程对象。

答案 3 :(得分:0)

简而言之。 RMI服务器在RMI注册表中注册其服务。客户端不知道RMI服务器所在的位置,并引用RMI注册表来获取所需的服务。

您可以在此处找到更多信息,例如:

相关问题