📅  最后修改于: 2023-12-03 14:57:36.506000             🧑  作者: Mango
Java RMI(Java Remote Method Invocation)是一种实现分布式应用程序的Java API。通过RMI,程序员可以编写分布式应用程序,使一个Java虚拟机上的对象调用另一个Java虚拟机上的对象的方法就像调用本地对象的方法一样。RMI为开发分布式应用程序提供了方便的方式,无论是在LAN还是在Internet上。
RMI实现了Java对象在远程主机间的直接传输,其通讯的过程简化如下:
RMI技术工作主要涉及到Remote接口、Stub类和Skeleton类。
Remote接口是实现分布式对象的基础。RMI技术的所有分布式对象都继承自Remote接口。Stub类和Skeleton类则分别作为远程调用客户端和服务端的承载实现,负责对象的网络通讯和处理远程调用请求。
客户端利用Stub类作为代理访问远程对象,服务端利用Skeleton类接收并处理远程对象的调用请求,这两种类的实现是由RMI系统自动生成的。同时,RMI技术还支持针对传输协议、网络优化、安全验证等方面的相关配置实现。
使用RMI时需要注意以下几点:
下面是RMI实例的服务端和客户端代码片段
public interface HelloInterface extends Remote {
public String sayHello() throws RemoteException;
}
public class HelloImpl extends UnicastRemoteObject implements HelloInterface {
public String sayHello() throws RemoteException {
return "Hello World";
}
}
public class HelloServer {
public static void main(String args[]) {
try {
Registry registry = LocateRegistry.createRegistry(1199);
registry.rebind("hello", new HelloImpl());
System.out.println("HelloServer is ready.");
} catch (RemoteException e) {
System.out.println("HelloServer exception: " + e.getMessage());
e.printStackTrace();
}
}
}
public class HelloClient {
public static void main(String args[]) {
try {
String name = "rmi://localhost:1199/hello";
HelloInterface hello = (HelloInterface) Naming.lookup(name);
System.out.println("Lookup completed " );
System.out.println(hello.sayHello());
} catch (Exception e) {
System.out.println("HelloClient exception: " + e);
}
}
}
其中,服务端提供了对HelloInterface接口的实现HelloImpl类,并将其通过RMI注册表绑定,客户端则是通过RMI的Naming类获取服务端的远程对象,并调用其方法。