【发布时间】:2012-12-02 17:58:42
【问题描述】:
如何将 RMI 使用的总端口数从 N(其中 N = RMI UnicastRemoteObject 的数量)减少到 2 + N?
请允许我进一步解释。我有一个使用 RMI 执行客户端-服务器通信的系统。有两个接口;为了简单起见,我们将它们称为客户端和服务器。 RMI 注册表与服务器在同一个 JVM 中运行,并绑定到某个端口(例如 4000)。服务器导出为没有端口号的 UnicastRemoteObject,并根据 no-args 构造函数绑定到匿名端口。
当客户端启动时,它会在服务器实现上调用一个 void hello(客户端客户端) 方法,该方法是从注册表查找中获得的。传入的Client实现也是一个UnicastRemoteObject;通过两个接口为我们提供客户端和服务器之间的双向通信。问题是客户端中的 UnicastRemoteObject 也在监听自己的匿名端口。
这意味着为了拥有 N 个客户端,我需要有 1 + 1 + 3 * N 个可用端口;其中 2 + N 个正在监听,2 * N 个是临时的。 (注册表+服务器实例+每个客户端一个监听端口,每个客户端的临时端口,每个服务器的临时端口)。我们通常有大约 30 个客户端,提供 92 个端口。我相信我可以将其减少到 32 个端口(1 + 1 + 每个客户端的临时端口),但我不知道如何使用纯 RMI 来做到这一点。
我愿意接受其他不需要 RMI,但也不需要我们重新编写接口的解决方案。
【问题讨论】: