本篇內容介紹了“怎么用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{@Overridepublic 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。