定義
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