RMI が使用するポート全体の数を N (N = RMI UnicastRemoteObject の数) から 2 + N に減らすにはどうすればよいですか?
さらに説明させてください。RMI を使用してクライアント/サーバー通信を実行するシステムがあります。2 つのインターフェイスがあります。簡単にするために、それらをクライアントとサーバーと呼びます。RMI レジストリはサーバーと同じ JVM で実行され、ポート (4000 など) にバインドされます。サーバーは、ポート番号のない UnicastRemoteObject としてエクスポートされ、引数のないコンストラクターに従って匿名ポートにバインドされます。
クライアントが起動すると、レジストリのルックアップから取得したサーバー実装で void hello(Client client) メソッドを呼び出します。渡された Client 実装も UnicastRemoteObject です。2 つのインターフェイスを介したクライアントとサーバー間の双方向通信を提供します。問題は、クライアントの UnicastRemoteObject も独自の匿名ポートでリッスンしていることです。
つまり、N 個のクライアントを使用するには、1 + 1 + 3 * N 個のポートを使用できる必要があります。2 + N はリスニングで、2 * N はエフェメラルです。(レジストリ + サーバー インスタンス + クライアントごとに 1 つのリッスン ポート、クライアントごとのエフェメラル ポート、サーバーごとのエフェメラル ポート)。通常、約 30 のクライアントがあり、92 個のポートがあります。これを 32 個のポート (1 + 1 + 各クライアントのエフェメラル ポート) まで減らすことができると思いますが、純粋な RMI でそれを行う方法がわかりません。
RMI を必要とせず、インターフェイスを書き直す必要もない他のソリューションも喜んで受け入れます。