私はRMIをとても新しくしています。私はexportObject(Object, int)
メソッドで混乱しました。ドキュメントには、Java RMI exportObjectメソッドの理解
リモートオブジェクトをエクスポートして、指定のポートを使用して、受信 コールを受信できるようにエクスポートします。 オブジェクトが
RMISocketFactory
クラスを使用して作成したサーバソケットでエクスポートされます。
は、次の簡単な例で考えてみましょう:だから私たちはスタブを作成し、別の手動またはRmiRegistry
経由に転送されます
public interface Client extends Remote {
void clientMethod() throws RemoteException;
}
public class ClientImpl implements Client {
public clientMethod() throws RemoteException {
System.out.println("clientMethod invoked");
}
}
Client stub = (Client) UnicastRemoteObject
.exportObject(new ClientImpl(), 56789); //<------ HERE
を、ここでは関係ありません。
私は、彼らが何を意味するのか?「[...] [...]オブジェクトがサーバソケットでエクスポートされた」ことでは
混乱していますか
これは、サーバー側のリモートオブジェクトにサーバーソケットが含まれることを意味します。あなたの 'Client'スタブは、サーバにサーバソケットを、クライアントにクライアントソケットを保持します。あなたの 'Client'はクライアントでない限りサーバーです。 –
Javaの[ServerSocket](https://docs.oracle.com/javase/8/docs/api/java/net/ServerSocket.html)を理解していますか?着信TCP要求をリッスンし、RMIがネットワークレベルで動作する場所です。 –
@ E_net4したがって、スタブを別のVM(VM 0)に転送すると、スタブは最初に作成されたVM(VM 2)へのソケット接続を保持します。 trurnのVM 2は、着信メソッド呼び出しを受け入れるためのサーバーソケットを維持します。あれは正しいですか? –