Java RMI服务器与RMI注册表

Java RMI服务器与RMI注册表,java,rmi,distributed-computing,Java,Rmi,Distributed Computing,关于Java RMI,它说: 而Java远程方法调用(JavaRMI)服务器可以 从理论上讲,它位于任何主机上,通常与主机上的主机相同 注册表正在运行的,并且在不同的端口上。即使 服务器的主机名或IP地址有误(或有主机名 这是客户无法解决的),它仍将导出所有 它的对象使用了错误的主机名,但您将看到 每次尝试接收其中一个对象时都会发生异常 我不理解RMI服务器和RMI注册表之间的区别。我以为他们是一样的。如果RMI注册表不是某种类型的服务器,它如何工作?RMI服务器是承载远程对象的程序。RMI注册

关于Java RMI,它说:

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


我不理解RMI服务器和RMI注册表之间的区别。我以为他们是一样的。如果RMI注册表不是某种类型的服务器,它如何工作?

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

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

也许Oracle的解释比常见问题解答好一点。

来自:

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

我认为这个术语很混乱,没有必要。这意味着每个远程对象都是服务器。最好只考虑远程对象。术语“RMI服务器”在RMI规范中出现了两次,两次都是指远程对象

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

与此相反,您引用的Oracle常见问题解答似乎将“RMI服务器”一词用作一种“承载”远程对象的程序:但这样的程序根本不存在。许多远程对象(如果不是大多数的话)只是“宿主”自己。将这样的程序描述为服务器只是对术语的误用

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

它是一个远程对象。

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

下面是

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

什么是RMI服务器: RMI服务器是JVM正在运行且对象(远程对象)处于活动状态的实际服务器。RMI客户端最终需要这个对象

根据您的担忧,是的,此服务器(RMI服务器)可能与运行RMI注册表的服务器不同。您可以理解原因!我可以在同一个RMI注册表中注册来自不同服务器的对象,并且可以让该注册表在完全不同的服务器上运行。请阅读下面的更多内容,了解更多关于这方面的解释

Java RMI客户端如何联系远程Java RMI服务器? 对于要联系远程Java RMI服务器的Java RMI客户端,客户端必须首先持有对该服务器的引用(这是RMI注册表出现的地方,以便为您提供对RMI服务器的引用。Naming.lookup方法调用是客户端最初获取远程服务器引用的最常见机制

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

请务必阅读相同的Oracle常见问题解答

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

因此,RMI注册表和RMI服务器是两件不同的事情。


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

要真正了解区别,您必须从这里阅读“编写RMI服务器”。。您将了解RMI服务器就像一扇前门,它允许您访问在RMI注册表中注册的对象。对象托管在RMI注册表上吗?根据下面的答案,它们托管在RMI S上