什么是 RMI 注册表

Posted

技术标签:

【中文标题】什么是 RMI 注册表【英文标题】:what is RMI registry 【发布时间】:2011-08-05 06:15:46 【问题描述】:

?它有什么作用?

【问题讨论】:

【参考方案1】:

本质上,RMI 注册中心是服务器注册它提供的服务的地方,也是客户端查询这些服务的地方。见Introduction to Java RMI。摘录:

图 1 显示了客户端在使用 RMI 时建立的连接。首先,客户端必须联系 RMI 注册中心,并请求服务的名称。开发人员 B 不会知道 RMI 服务的确切位置,但他知道的足够多,可以联系开发人员 A 的注册表。这将指向他想要调用的服务的方向..

【讨论】:

这里还有一个有趣的地方可以进一步了解 Java RMI:docs.oracle.com/javase/tutorial/rmi/index.html @LuckyLuc 同意。不仅是一个有趣的地方,而且是一个更好的地方。此处不应在官方参考文献之前引用任意 Internet 垃圾,当然也不应在 RMI 规范等规范性参考文献之前引用。 所以每个程序只有一个RMI Registry,但是可以有很多台服务器。对吗?【参考方案2】:

RMI Registry 充当 RMI 服务器和客户端之间的代理。服务器在注册表中“注册”其服务 - 因此 RMI 注册表可以充当许多服务器/服务的“目录”。客户端不需要知道各个服务器的位置,并在 RMI 注册表中查找它需要的服务。作为命名目录的注册表将适当的句柄返回给客户端以调用方法。

Google 周围,有很多关于 RMI 的信息。

【讨论】:

【参考方案3】:

Java 的远程方法调用 (RMI) 注册表本质上是一个目录服务。

远程对象注册表是一个引导命名服务,同一主机上的 RMI 服务器使用它来将远程对象绑定到名称。然后,本地和远程主机上的客户端可以查找远程对象并进行远程方法调用。(Documentation)

您可以使用 RMI 或 JNDI 通过 rmi 注册表远程绑定和查找您的对象。

这是代理设计模式的一个众所周知的用例。 RMI 服务器在 RMI 注册表上注册对象(本质上是存根)。远程客户端查找这些存根并在其上调用方法。在要调用的方法的幕后,它的参数被序列化并发送到具有实现的实际 RMI 服务器。 RMI 服务器(骨架代码)反序列化请求调用实际方法,收集结果,反序列化并将其发送回客户端(存根)。存根对结果进行反序列化并将其返回给调用此方法的代码。

【讨论】:

【参考方案4】:

首先,服务器将名称与 RMI 注册表中的远程对象相关联。当客户端想要访问远程对象时,它会在注册表中按其名称查找该对象。 然后客户端可以在服务器上调用远程对象上的方法。

http://www8.cs.umu.se/education/examina/Rapporter/471App.pdf

【讨论】:

以上是关于什么是 RMI 注册表的主要内容,如果未能解决你的问题,请参考以下文章

JUnit 和 RMI 应用程序的最佳实践,RMI 注册表

使用 ProcessBuilder 时客户端无法连接 RMI 注册表

Java RMI - 访问不同机器上的 RMI 注册表对象 - AccessControlException?

Windows无法找到rmi注册表

服务器如何与 RMI 中的客户端建立会话

查看其他人RMI文章和自己试验后的心得