1

Java RMI に関連するいくつかのチュートリアル (そのうちの 1 つ) を読んでいますが、RMI サーバーについてほとんど理解していません。

Java メイン プログラムを起動し、 を作成してUnicastRemoteObjectから、RMI レジストリ サーバーにオブジェクトをバインドします (チュートリアルに従ってください)。その後、Java メイン プログラムはバインド後に終了します。

の親クラスはUnicastRemoteObjectですRemoteServer。私が作成したすべてのリモート オブジェクト (これも ですUnicastRemoteObject) は、1 つの匿名ポートでリッスンする Java プロセス (JVM) であると想定しています。

では、10 個のリモート オブジェクトがある場合、クライアントのリモート呼び出しを処理するために 10 個のポートが占有されるのでしょうか? これは正しくないように思えますが、実際に確立された RMI サーバーがどこにあり、リモート クライアントの呼び出しのために RMI サーバーが占有するポート数がわかりません。

誰かがこのことがどのように機能するかを詳細に説明できますか?

4

1 に答える 1

2

Java メイン プログラムを起動し、UnicastRemoteObject を作成します。その後、オブジェクトを RMI レジストリ サーバーにバインドします (チュートリアルに従います)。その後、Java メイン プログラムはバインド後に終了します。

いいえ、そうではありません。リモート オブジェクトがエクスポートされている限り、アクティブなままになります。

UnicastRemoteObject の親クラスは RemoteServer です。作成したすべてのリモート オブジェクト (これも UnicastRemoteObject) は、1 つの匿名ポートをリッスンする Java プロセス (JVM) であると想定しています。

いいえ。現在の JVM 内に存在するのは 1 つの Java オブジェクトです。個別のプロセスではありません。

では、10 個のリモート オブジェクトがある場合、クライアントのリモート呼び出しを処理するために 10 個のポートが占有されるのでしょうか?

いいえ。ポートを指定しない限り、システムによって割り当てられたポートが取得されます。通常、ポートは、この JVM からエクスポートするすべてのリモート オブジェクト間で共有されます。

これは正しく聞こえません

そうではありません。

しかし、実際に確立されたRMIサーバーがどこにあり、リモートクライアントの呼び出しのためにいくつのポートを占有するかを実際に見つけることができませんか?

RMI 実装クラスの奥深くにあります。

于 2015-05-02T14:57:50.257 に答える