定义
Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。
如何制作服务端(“Say Hello 为例”)
1.制作服务端接口
import java.rmi.*;
public interface MyRemote extends Remote{
public String sayHello() throws RemoteException;
}
2.制作服务端接口实现
import java.rmi.*;
import java.rmi.server.*;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{
public String sayHello(){
return "Server says: 'Hello'";
}
public MyRemoteImpl() throws RemoteException{}
public static void main(String[] args){
try{
MyRemote service = new MyRemoteImpl();
Naming.rebind("RemoteHello", service);
}catch(Exception e){
e.printStackTrace();
}
}
}
3.使用rmic产生stub和skeleton
打开新的cmd命令窗口,执行:
javac MyRemote.java
javac MyRemoteImpl.java
rmic MyRemoteImpl
4.启动rmiregistry
打开新的cmd命令窗口,执行:
rmiregistry
5.启动服务端服务
打开新的cmd命令窗口,执行:
java MyRemoteImpl
客户端如何调用?
1.制作客户端
import java.rmi.*;
public class MyRemoteClient{
public static void main(String[] args){
new MyRemoteClient().go();
}
public void go(){
try{
MyRemote service = (MyRemote)Naming.lookup("rmi://127.0.0.1/RemoteHello");
String s = service.sayHello();
System.out.println(s);
}catch(Exception e){
e.printStackTrace();
}
}
}
2.运行
javac MyRemoteClient.java
java MyRemoteClient
输出结果:Server says: 'Hello'
(需要保证服务端第三步制作的stub与客户端程序在同一个目录)
原理
原理图
总结:Client程序通过查找客户端stub与服务端的Skeleton进行通信,服务端的Skeleton调用服务端的实际执行程序,最终结果通过Skeleton、Stub返回给Client