RMI

RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。

image.png

在本地进程中,调用对象方法只需要创建类对象直接进行调用即可,然而如果是不同进程之间或者不同计算机之间的调用,我们需要使用RPC(Remote Procedure Call)调用。而RMI就是JAVA中的专属RPC框架。老规矩,先看一个demo:
接口类:

public interface Hello extends Remote {

    public String sayHello(String name) throws RemoteException;
}

接口需要继承Remote类
接口实现类:

public class HelloImpl extends UnicastRemoteObject implements Hello{
//对父类进行初始化
    public HelloImpl() throws RemoteException {
        super();
    }

    @Override
    public String sayHello(String name) throws RemoteException{
        System.out.println("你好" + name);
        return  "Hello " + name;
    }
}

实现类需要继承UnicastRemoteObject,并需要为父类进行初始化。

服务器:

    public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException {
        // 1,创建类对象(接口类对象)
        Hello hello = new HelloImpl();
        // 2,注册
        Registry registry = LocateRegistry.createRegistry(1194);
        // 3,绑定
        Naming.rebind("rmi://127.0.0.1:1194/he",hello);
        System.out.println("服务启动成功");
    }

上述服务器试用Naming方法进行绑定。而且注意绑定的对象一定是接口类的对象,因为底层使用了动态代理的方式
客户端:

    public static void main(String[] args) throws MalformedURLException, NotBoundException, RemoteException {
        Hello hello = (Hello) Naming.lookup("rmi://127.0.0.1:1194/he");
        System.out.println(hello.sayHello("yangsir"));
    }

访问服务器,获取hello对象,执行方法sayHello。
测试结果:

image.png
image.png

结果说明方法的执行是在服务端,然后将执行结果返回到了客户端。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容