您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關使用java編寫一個rmi的案例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
RMI 指的是遠程方法調用 (Remote Method Invocation)。它是一種機制,能夠讓在某個 Java虛擬機上的對象調用另一個 Java 虛擬機中的對象上的方法。可以用此方法調用的任何對象必須實現該遠程接口。
調用這樣一個對象時,其參數為 "marshalled" 并將其從本地虛擬機發送到遠程虛擬機(該遠程虛擬機的參數為 "unmarshalled")上。該方法終止時,將編組來自遠程機的結果并將結果發送到調用方的虛擬機。如果方法調用導致拋出異常,則該異常將指示給調用方。
提供遠端訪問的時候,我們首先需要定義遠端能夠訪問哪些東西,在Java中,定義這類接口需要實現Remote接口
public interface Business extends Remote{ public String echo(String msg) throws RemoteException; }
定義完接口之后,這些功能是需要我們自己在Server端實現的,因此,聲明一個類實現我們提供接口。
public class BusinessImpl implements Business{ @Override public String echo(String msg) throws RemoteException { if("quit".equalsIgnoreCase(msg)) { System.out.println("Server will be shutdown"); System.exit(0); } System.out.println("Message from client:"+msg); return "Server response:"+msg; } }
實現完這個方法之后,有一個問題是,怎么運行,既然是遠端訪問,肯定得有端口號,肯定得有實例,所以我們還需要注冊我們的代碼
public class Server { public static final String SERVER_REGISTER_NAME = "BusineeDemo"; public static void main(String[] args) throws RemoteException { int port = 2016; Business business = new BusinessImpl(); UnicastRemoteObject.exportObject(business,port); Registry registry = LocateRegistry.createRegistry(1099); registry.rebind(SERVER_REGISTER_NAME, business); } }
這里有兩個Java的類:UnicastRemoteObject和LocateRegistry
一個接口:Registry
Registry接口:對簡單的遠端對象提供一個遠端接口用于提供存儲和獲取遠端對象的引用,而這些是通過任意的String類型的變量名稱獲取,bind,unbind,rebind方法是用于更改注冊的這些名稱,lookup和list方法是用于查詢當前當前已經綁定的對象。
UnicastRemoteObject類:用于導出一個遠端對象
LocateRegistry類:是一個用來獲得遠端調用對象引用的輔助類程序,主要是在一個特定的IP上構建一個遠端對象來接受來自特定端口的回調。
簡單的服務端完成了,現在來看客戶端:
客戶端代碼就更加簡單,前面我們提到我們可以通過Registry的lookup方法來獲取當前已經綁定的服務,所以很自然,我們首先要獲得這個Registry
public class Client { public static void main(String[] args) throws RemoteException, NotBoundException { // Registry registry = LocateRegistry.getRegistry("localhost"); Registry registry = LocateRegistry.getRegistry("localhost", 1099); Business business = (Business) registry.lookup(Server.SERVER_REGISTER_NAME); System.out.println(business.echo("Hello Server")); } }
關于“使用java編寫一個rmi的案例”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。