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