📅  最后修改于: 2023-12-03 15:32:02.279000             🧑  作者: Mango
Java中的远程方法调用(Remote Method Invocation,简称RMI)是一种机制,用于在不同的Java虚拟机之间进行通信和相互调用。通过RMI,开发者可以像本地调用方法一样去调用分布式系统中的方法,同时也可以在分布式系统中进行对象传输。
RMI是基于Java远程调用(Java Remote Procedure Call,简称Java RPC)实现的。在RMI中,对象可以被包装成远程对象并被放置于RMI服务器上。当客户端需要调用远程对象上的方法时,它会将调用传递给服务器,服务器会在远程对象上执行方法并将结果返回给客户端。
RMI远程对象的实现需要符合Java远程对象(Java Remote Object,简称JRO)的规范。一个Java远程对象必须继承自java.rmi.server.UnicastRemoteObject类。这个类提供了许多远程对象方法的默认实现,以及用于序列化和反序列化远程对象的机制。
开发一个RMI应用程序的步骤如下所示:
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
public String sayHello(String name) throws RemoteException;
}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHello(String name) throws RemoteException {
return "Hello, " + name + "!";
}
}
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
// 创建远程对象
HelloImpl hello = new HelloImpl();
// 获取注册表
Registry registry = LocateRegistry.getRegistry();
// 将远程对象注册到注册表中
registry.bind("Hello", hello);
System.out.println("服务器已启动...");
} catch(Exception e) {
e.printStackTrace();
}
}
}
import java.rmi.Naming;
public class Client {
public static void main(String[] args) {
try {
// 检索远程对象并强制转换为Hello对象
Hello hello = (Hello) Naming.lookup("rmi://localhost/Hello");
// 调用远程对象的方法
String result = hello.sayHello("World");
System.out.println(result);
} catch(Exception e) {
e.printStackTrace();
}
}
}