RMI
Java-RMI
RMI允许远程调用对象。RMI机制有一个服务端一个客户端,服务端创建注册中心,并绑定相应的对象,并给对象起一个名字,方便获取。客户端获取注册中心,通过注册中心使用给对象起的名字,可以定位到对象并调用。
注册中心有一个固定的端口
一个继承了Remote的接口IRemoteObj:
import java.rmi.Remote; import java.rmi.RemoteException; public interface IRemoteObj extends Remote { public String sale(String s) throws RemoteException; }
IRemoteObj接口的实现类IRemoteObjIml:
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class IRemoteObjIml extends UnicastRemoteObject implements IRemoteObj{//该接口实现类继承UnicastRemoteObject protected IRemoteObjIml() throws RemoteException { super(); } @Override public String sale(String s) throws RemoteException{ System.out.println(s); return s; } }
服务端:
实例化一个接口实现类IRemoteObjIml的对象用于绑定到注册中心
实例化一个注册中心
把IRemoteObjIml的对象绑定到注册中心,并起一个名字
import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class rmiserver1 { public static void main(String[] args) throws Exception{ IRemoteObj obj = new IRemoteObjIml(); Registry registry = LocateRegistry.createRegistry(12346); registry.bind("test",obj);//客户端远程调用可以通过test找到该对象 } }
客户端:
通过ip和port得到注册中心,然后使用lookup找到要调用的对象
import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class clientrmi1 { public static void main(String[] args) throws Exception{ Registry registry = LocateRegistry.getRegistry("127.0.0.1",12346); IRemoteObj reobj = (IRemoteObj) registry.lookup("test"); String s = reobj.sale("卖西瓜");//调用对象的sale方法,得到服务端的返回结果 System.out.println(s);//打印返回结果 } }
注意
RMI机制客户端调用远程对象方法,实际上是客户端发送请求到服务端,由服务端执行代码,并将代码执行的结果返回给客户端。所以上述客户端需要接收服务端返回的结果并打印。(也就是RMI远程调用的方法其实是由服务端执行的)
RMI调用过程使用网络传输,是通过序列化、反序列化进行的。
RMI是一个JVM远程调用另一个JVM的对象方法,服务端和客户端可以在两台不同的机器,也可以在同一机器的不同进程。
参考:
https://xz.aliyun.com/t/9261#toc-4
https://www.bilibili.com/video/BV1L3411a7ax?p=2&vd_source=772372a8c6f216ba8975276dca04045e
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理