av网站免费线看精品_国产做a爱视频免费不_深爱激情网开心五月天_伊人五月天在线视频网

 
關于遠程方法調用(RMI)的實現(xiàn)
發(fā)布時間:2005-03-17   瀏覽次數(shù):1234862
遠程方法調用 遠程方法調用(Remote Method Invocation ,RMI)使用戶能訪問在另一 主機上的Java對象,并遠程調用其方法。程序的對象是客戶,而遠程對象是服 務器。遠程對象也可以是另一個遠程服務對象的客戶。通過使用持續(xù)性(串行 化和解串行化),本地對象和原始類型值可以作為參數(shù)傳遞給遠程對象。這種 方式允許Java程序可以利用分布式計算將工作量分散到多個Java虛擬機上。 工作原理 RMI系統(tǒng)結構,在客戶端和服務器端都有幾層結構。 --------- ---------- | 客戶 | | 服務器| ---------- ---------- | | ------------- ---------- | 占位程序 | | 骨干網(wǎng) | -------------- ----------- | | ------------------------------------ | 遠 程 引 用 層 | ------------------------------------ | | ------------------------------------ | 傳 輸 層 | ------------------------------------ 方法調用從客戶對象經(jīng)占位程序(Stub)、遠程引用層(Remote Reference Layer)和傳輸層(Transport Layer)向下,傳遞給主機,然后再次經(jīng)傳 輸層,向上穿過遠程調用層和骨干網(wǎng)(Skeleton),到達服務器對象。 占位程序扮演著遠程服務器對象的代理的角色,使該對象可被客戶。 遠程引用層處理語義、管理單一或多重對象的通信,決定調用是應發(fā)往一個 服務器還是多個。傳輸層管理實際的連接,并且追追蹤可以接受方法調用的 遠程對象。服務器端的骨干網(wǎng)完成對服務器對象實際的方法調用,并獲取返 回值。返回值向下經(jīng)遠程引用層、服務器端的傳輸層傳遞回客戶端,再向上 經(jīng)傳輸層和遠程調用層返回。,占位程序獲得返回值。 要完成以上步驟需要有以下幾個步驟: 1、生成一個遠程接口 2、實現(xiàn)遠程對象(服務器端程序) 3、生成占位程序和骨干網(wǎng)(服務器端程序) 4、編寫服務器程序 5、編寫客戶程序 6、注冊遠程對象 7、啟動遠程對象 具體實現(xiàn)如下: 1、生成一個遠程接口 package c15.ptime; import java.rmi.*; public interface PerfectTimeI extends Remote { long getPerfectTime() throws RemoteException; } 2、實現(xiàn)遠程對象(服務器端程序) package c15.ptime; import java.rmi.*; import java.rmi.server.*; import java.rmi.registry.*; import java.net.*; public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI { public long getPerfectTime() throws RemoteException { return System.currentTimeMillis(); } public PerfectTime() throws RemoteException { super(); } public static void main(String[] args) { System.setSecurityManager( new RMISecurityManager()); try { PerfectTime pt = new PerfectTime(); Naming.rebind( "http://zhouty:05/PerfectTime" , pt); System.out.println("Ready to do time"); } catch(Exception e) { e.printStackTrace(); } } } 4、編譯遠程對象(服務器端程序) javac -classpath . -d . PerfectTime.java 5、生成根和干(占位程序和骨干程序) rmic -classpath . -d . c15.ptime.PerfectTime 6、注冊遠程對象 start rmiregistry 05 7、啟動服務器端程序 java -Djava.rmi.server.codebase=file:///d:/TestRMI/ c15.ptime.Per fectTime 8、編寫客戶端程序 package c15.ptime; import java.rmi.*; import java.rmi.registry.*; public class DisplayPerfectTime { public static void main(String[] args) { System.setSecurityManager( new RMISecurityManager()); try { PerfectTimeI t = (PerfectTimeI)Naming.lookup( "192.168.0.171:05/PerfectTime"); for(int i = 0 ; i < 10; i++) System.out.println("Perfect time =" + t.getPerfectTime()); } catch(Exception e) { e.printStackTrace(); } } } 9、編譯客端程序 javac -classpath . -d . DisplayPerfectTime.java 10、修改JVM的配置文件 (客戶機和服務器的都需要經(jīng)過修改) %JRE_HOME%\policytool.exe 11、啟動客戶程序 java -classpath . c15.ptime.DisplayPerfectTime 12、返回結果 Perfect time =967274884390 Perfect time =967274884450 Perfect time =967274884450 Perfect time =967274884450 Perfect time =967274884500 Perfect time =967274884500 Perfect time =967274884560 Perfect time =967274884610 Perfect time =967274884610 Perfect time =967274884610 參考: 《JAVA 編程思想》 《輕松掌握JBUILDER2》 《SUN JDK文檔》 -- 我思,故我在 來源:http://edu.chinaz.com
立即預約