gpt4 book ai didi

java - RMI 服务器与 RMI 注册表

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:42:48 26 4
gpt4 key购买 nike

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

While the Java Remote Method Invocation (Java RMI) server can theoretically be on any host, it is usually the same host as that on which the registry is running, and on a different port. Even if the server is mistaken about its hostname or IP address (or has a hostname that simply isn't resolvable by clients), it will still export all of its objects using that mistaken hostname, but you will see an exception every time you try to receive one of those objects.

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

最佳答案

什么是 RMI 注册表:

RMI 注册表是一种服务,远程对象在其中注册,注册的远程对象由 RMI 客户端查找。如果你希望你的对象可以远程访问(可能有很多原因,比如你不断更新逻辑,而不是每次都交付给实现,所以允许通过 RMI 进行远程调用)然后在 RMI 注册表中注册它,然后在 RMI 中注册它客户端将查找远程对象(使用对象的远程引用),然后可以调用远程对象上的方法。

下面是definition of registry from Oracle Javadoc

A registry is a remote object that maps names to remote objects. A server registers its remote objects with the registry so that they can be looked up. When an object wants to invoke a method on a remote object, it must first lookup the remote object using its name. The registry returns to the calling object a reference to the remote object, using which a remote method can be invoked.

什么是 RMI 服务器:

RMI 服务器是运行 JVM 和对象(远程对象)的实际服务器。 RMI 客户端最终需要这个对象。

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

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

要让 Java RMI 客户端联系远程 Java RMI 服务器,客户端必须首先持有对服务器的引用(这就是 RMI 注册中心出现的地方,为您提供 RMI 服务器的引用 )。 Naming.lookup 方法调用是客户端最初获取对远程服务器的引用的最常见机制。

每个远程引用都包含一个服务器主机名和端口号,允许客户端定位为特定远程对象提供服务的 VM(这就是 RMI 服务器出现的地方)。一旦 Java RMI 客户端拥有远程引用,客户端将使用引用中提供的主机名和端口打开到远程服务器的套接字连接。

请务必阅读 this来自相同的 Oracle 常见问题解答。

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

因此,RMI 注册表和 RMI 服务器是两个不同的东西。

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

关于java - RMI 服务器与 RMI 注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32913180/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com