在关于Java的甲骨文的FAQ页面上,它说:
虽然理论上Java远程方法调用(Java )服务器可以位于任何主机上,但它通常与运行注册表的主机相同,并且位于不同的端口上。即使服务器弄错了其主机名或IP地址(或者有一个根本无法由客户端解析的主机名),它仍然会使用错误的主机名导出其所有对象,但是每次尝试接收这些对象时都会看到异常。
我不明白RMI服务器和RMI注册表之间的区别。我以为他们是一样的。如果RMI注册表不是某种类型的服务器,它如何工作?
发布于 2015-10-02 21:37:07
什么是RMI注册中心:
RMI注册表是一种服务,其中远程对象被注册,注册的远程对象由RMI客户端查找。如果您希望您的对象可以远程访问(可能有很多原因,比如您一直在更新逻辑,而且每次都不可能将其传送到实现,因此允许通过RMI进行远程调用),然后将其注册到RMI注册表中,然后RMI客户端将查找远程对象(使用对象的远程引用),然后可以调用远程对象上的方法。
注册表是将名称映射到远程对象的远程对象。服务器向注册表注册其远程对象,以便查找它们。当对象想要调用远程对象上的方法时,它必须首先使用其名称查找远程对象。注册表向调用对象返回对远程对象的引用,使用该引用可以调用远程方法。
什么是RMI服务器:
RMI服务器是运行JVM和对象(远程对象)的实际服务器。RMI客户端最终想要这个对象。
根据您的关注,是的,这个服务器(RMI服务器)可能与运行RMI注册表的服务器不同。和您可以理解为什么!我可以在同一个RMI注册表中注册来自不同服务器的对象,并且可以让该注册表在完全不同的服务器上运行。有关这方面的更多解释,请阅读下面的更多内容。
Java客户端如何与远程Java服务器联系?
若要使Java客户端与远程Java服务器联系,客户端必须首先保存对服务器的引用(--这是RMI注册中心出现的位置,以便为您提供对服务器的引用)。Naming.lookup方法调用是客户端最初获取对远程服务器的引用的最常见机制。
每个远程引用都包含一个服务器主机名和端口号,允许客户端定位为特定远程对象提供服务的VM (,这是服务器进入图片的地方)。一旦Java客户机具有远程引用,客户机将使用引用中提供的主机名和端口打开到远程服务器的套接字连接。
请阅读来自同一个甲骨文常见问题的这。
您可以很好地连接到RMI注册中心,但是您可能无法获得远程对象,这时人们会报告java.net.UnknownHostException,这意味着RMI注册表能够提供远程对象的引用,但是实际上承载远程对象或运行JVM的RMI服务器没有找到,或者客户端无法连接。
因此,注册中心和RMI服务器是两种不同的东西。
类似地,HTTP服务器用于提供对服务器上可用的HTTP资源(超文本文档)的访问。但是,超文本文档通常与HTTP服务器位于同一个物理框上,但RMI注册表可以提供对不同服务器(RMI服务器)上的远程对象的引用的访问。
发布于 2015-10-02 18:19:16
RMI服务器是托管远程对象的程序。RMI注册表是一个单独的程序,它将远程对象名称绑定到实例。RMI服务器通过在注册表中注册远程对象使远程对象可访问;然后客户端通过该注册表获得访问权限。RMI注册表是小写的“s”" Server“,但通常不是"RMI Server”。
RMI服务器与RMI注册表之间的关系类似于web服务器与对其具有权威性的DNS服务器之间的关系。
也许甲骨文的入门指南比FAQ解释得更好一些。
https://stackoverflow.com/questions/32913180
复制相似问题