#RMI はリモート メソッド呼び出しを指します。 これは、Java 仮想マシン上のオブジェクトが別の Java 仮想マシン内のオブジェクトのメソッドを呼び出すことを可能にするメカニズムです。このメソッドで呼び出すことができるオブジェクトはすべて、リモート インターフェイスを実装する必要があります。
このようなオブジェクトを呼び出すと、そのパラメータは「マーシャリング」され、ローカル仮想マシンからリモート仮想マシンに送信されます (リモート仮想マシンのパラメータは「アンマーシャリング」されます) )優れた。メソッドが終了すると、リモート マシンからの結果がマーシャリングされ、呼び出し元の仮想マシンに送信されます。メソッド呼び出しによって例外がスローされた場合、その例外が呼び出し元に通知されます。 リモート アクセスを提供する場合、最初にリモート エンドがアクセスできるものを定義する必要があります。Java では、このタイプのインターフェイスを定義するには、リモート インターフェイスを実装する必要があります。public interface Business extends Remote{ public String echo(String msg) throws RemoteException; }インターフェイスを定義した後、これらの関数はサーバー側で独自に実装する必要があるため、提供するインターフェイスを実装するクラスを宣言します。
public class BusinessImpl implements Business{ @Override public String echo(String msg) throws RemoteException { if("quit".equalsIgnoreCase(msg)) { System.out.println("Server will be shutdown"); System.exit(0); } System.out.println("Message from client:"+msg); return "Server response:"+msg; } }このメソッドを実装した後、どのように実行するかが問題になります。リモート アクセスであるため、ポート番号とインスタンスが必要であるため、コードも登録する必要があります
public class Server { public static final String SERVER_REGISTER_NAME = "BusineeDemo"; public static void main(String[] args) throws RemoteException { int port = 2016; Business business = new BusinessImpl(); UnicastRemoteObject.exportObject(business,port); Registry registry = LocateRegistry.createRegistry(1099); registry.rebind(SERVER_REGISTER_NAME, business); } }
2 つの Java クラスがあります: UnicastRemoteObject と LocateRegistry
1 つのインターフェイス: RegistryRegistry インターフェイス: 単純なリモート オブジェクトのリモート インターフェイスを提供します。への参照を保存および取得するために使用されます。リモート オブジェクトは、任意の String 型変数名を通じて取得されます。bind、unbind、および rebind メソッドは、登録された名前を変更するために使用されます。lookup および list メソッドは、現在のバインド済みオブジェクトをクエリするために使用されます。 UnicastRemoteObject クラス: リモート オブジェクトのエクスポートに使用されます。 LocateRegistry クラス: リモート呼び出しオブジェクトへの参照を取得するために使用される補助クラス プログラムで、主に特定の IP リモート上にリモート オブジェクトを構築するために使用されます。オブジェクトを使用して、特定のポートからのコールバックを受け入れます。単純なサーバーが完成したので、クライアントを見てみましょう:
クライアント コードはさらに単純で、レジストリのルックアップ メソッドを使用できることは前述しました。現在バインドされているサービスを取得するため、当然、最初にこのレジストリを取得する必要がありますpublic class Client { public static void main(String[] args) throws RemoteException, NotBoundException { // Registry registry = LocateRegistry.getRegistry("localhost"); Registry registry = LocateRegistry.getRegistry("localhost", 1099); Business business = (Business) registry.lookup(Server.SERVER_REGISTER_NAME); System.out.println(business.echo("Hello Server")); } }
以上がJavaでrmiを記述する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。