RMI简单学习

简单的说一下rmi的原理

接口,必须要有实现接口

package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IHello extends Remote {
public String sayHello(String name) throws RemoteException;
}

首先是服务端,服务端的流程就是,

  • 服务端创建远程对象:服务端定义一个远程接口和实现类,实现类继承自 UnicastRemoteObject 并实现远程接口的方法。
  • 服务端注册远程对象:服务端使用 LocateRegistry.createRegistry() 启动 RMI 注册表,然后使用 Naming.rebind() 将远程对象绑定到注册表中
package rmi;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
public class RMIServer {
public class RMIHello extends UnicastRemoteObject implements IHello{
protected RMIHello() throws RemoteException{
super();
}
@Override
public String sayHello(String name) throws RemoteException{
System.out.println("Hello,World");
return name;
}
}
private void register() throws Exception{
RMIHello rmiHello = new RMIHello();
LocateRegistry.createRegistry(1099);
Naming.bind("rmi://0.0.0.0:1099/hello",rmiHello);
System.out.println("Registry运行中......");
}
public static void main(String[] args) throws Exception{
new RMIServer().register();
}
}

 

客户端的流程就是

  • 客户端查找远程对象:客户端使用 Naming.lookup() 查找远程对象,并通过它来调用远程方法。
  • 处理远程异常:在远程方法调用中可能会抛出 RemoteException,所以无论是在服务端还是客户端都需要处理这些异常。
    package rmi;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.registry.Registry;
    public class RMIClient {
    public static void main(String[] args) throws Exception{
    Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
    IHello iHello = (IHello) registry.lookup("hello");
    System.out.println(iHello.sayHello("Feng"));
    }
    }

    整体原理就是:服务端通过启动注册表,绑定远程对象,然后在使客户端查找这个对象,来调用远程方法

posted @   A8k1a4  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示