Skip to content

RMI(Remote Method Invocation)是Java中用于实现远程调用的一种机制。它允许在不同的Java虚拟机之间进行方法调用,就像本地方法调用一样简单。

要使用RMI进行远程调用,需要定义一个远程接口,并将其实现为一个远程对象。以下是一个简单的示例:

  1. 首先,定义一个远程接口:
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyRemoteInterface extends Remote {
    String sayHello() throws RemoteException;
}
  1. 然后,实现该接口的远程对象:
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class MyRemoteObject extends UnicastRemoteObject implements MyRemoteInterface {
    protected MyRemoteObject() throws RemoteException {
        super();
    }

    public String sayHello() throws RemoteException {
        return "Hello from the remote object!";
    }
}
  1. 接下来,在服务器端创建并导出远程对象:
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server {
    public static void main(String[] args) {
        try {
            // 创建远程对象
            MyRemoteInterface remoteObject = new MyRemoteObject();

            // 导出远程对象
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.rebind("MyRemoteObject", remoteObject);

            System.out.println("Server is ready.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 最后,在客户端获取远程对象并调用方法:
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {
    public static void main(String[] args) {
        try {
            // 获取远程对象
            Registry registry = LocateRegistry.getRegistry("localhost", 1099);
            MyRemoteInterface remoteObject = (MyRemoteInterface) registry.lookup("MyRemoteObject");

            // 调用远程方法
            String result = remoteObject.sayHello();
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这就是一个简单的RMI远程调用示例。在实际应用中,还可以传递参数和返回值,并且可以定义更多的远程接口和远程对象来实现复杂的功能。