虽然我将我的服务器绑定到RMI注册表,因此客户端可以从每个人都知道的源查找服务,我需要更多地了解RMI机制,因为我不想使用注册表在将来,我的客户应该能够为他们想要联系的特定服务器创建UnicastRemoteObject
(或其子类)。
我觉得这个问题实际上可能有一个明显的答案,但如果有人能通过这些步骤指导我,我会感激不尽。客户需要知道什么才能创建存根并使用远程服务?
所以,我在一台设备上有一台服务器,我有一个想要使用这项服务的客户端。服务器对象已导出,但尚未在服务器和客户端都知道的位置上的目录中注册。客户端可以自己创建存根而不必使用服务器导出的存根吗?服务器创建存根需要哪些信息?服务器的IP?港口?还有什么?如何将所有这些信息组合在一起以创建存根?
我不想使用注册表,因为使用注册表过于集中。我实际上有一组设备,既作为客户端,也作为这些设备提供和使用相同服务的服务器。每个设备代表自己的自主神经元,它们一起起到神经系统的作用。
当群集成员使用不属于此群集成员的设备时,群集会增长。一旦非成员设备成为成员,其所使用的成员就允许其他成员知道现在新成员的存根,以便其他成员可以尝试使用新成员。使用注册表并不会为此群集带来任何有价值的东西。
如果没有注册表,第一个参与非成员的成员就是这样做的,并且#34;手动"。我想这个手动过程在非成员设备启动时会有所帮助,而非成员设备让操作员知道(通过某些显示)必须用于创建存根的参数,这将允许第一个成员设备参与它
答案 0 :(得分:0)
'为特定服务器创建UnicastRemoteObject
是没有意义的。无论何时创建一个,它都在本地主机上运行。 [有一个例外,但在这种情况下不适用。]
客户端可以自己创建存根而不必使用服务器导出的存根吗?
没有。 [再次有一个例外,因为这正是Registry.locateRegistry()
的作用,但是它使用了你不熟悉的类,所以你不能。{/ p>
您必须解释您对RMI设计人员的意图使用注册表的厌恶。
编辑您真正需要的是分布式注册表。 RMI / JRMP没有(不可能),但您可以调查RMI / IIOP和合适的ORB供应商,这对他们来说是肉和饮料。或者通过JNDI而不是注册表使用中央LDAP服务器。
答案 1 :(得分:0)
回答我自己的问题并不时髦,但我做了一些研究,似乎我的问题适合多播。
我找到了一篇帖子here,其中讨论了向多个设备发送包含RMI存根的UDP数据包的可行性。我实例中的发件人将是非成员设备,接收者将是成员集群。然后,这些成员设备将在他们自己之间进行组织,其中一个会尝试与发送者进行交流。
虽然引用帖子的示例代码的链接似乎不再起作用,但这确实看起来很有希望......