溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用java編寫一個rmi的方法

發(fā)布時間:2020-09-17 10:21:15 來源:億速云 閱讀:127 作者:小新 欄目:編程語言

小編給大家分享一下使用java編寫一個rmi的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

 RMI 指的是遠程方法調(diào)用 (Remote Method Invocation)。它是一種機制,能夠讓在某個 Java虛擬機上的對象調(diào)用另一個 Java 虛擬機中的對象上的方法??梢杂么朔椒ㄕ{(diào)用的任何對象必須實現(xiàn)該遠程接口。

調(diào)用這樣一個對象時,其參數(shù)為 "marshalled" 并將其從本地虛擬機發(fā)送到遠程虛擬機(該遠程虛擬機的參數(shù)為 "unmarshalled")上。該方法終止時,將編組來自遠程機的結(jié)果并將結(jié)果發(fā)送到調(diào)用方的虛擬機。如果方法調(diào)用導致拋出異常,則該異常將指示給調(diào)用方。

提供遠端訪問的時候,我們首先需要定義遠端能夠訪問哪些東西,在Java中,定義這類接口需要實現(xiàn)Remote接口

public interface Business extends Remote{
     public String echo(String msg) throws RemoteException;
}

定義完接口之后,這些功能是需要我們自己在Server端實現(xiàn)的,因此,聲明一個類實現(xiàn)我們提供接口。

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;
    }
}

實現(xiàn)完這個方法之后,有一個問題是,怎么運行,既然是遠端訪問,肯定得有端口號,肯定得有實例,所以我們還需要注冊我們的代碼

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方法是用于查詢當前當前已經(jīng)綁定的對象。

UnicastRemoteObject類:用于導出一個遠端對象

LocateRegistry類:是一個用來獲得遠端調(diào)用對象引用的輔助類程序,主要是在一個特定的IP上構(gòu)建一個遠端對象來接受來自特定端口的回調(diào)。

簡單的服務端完成了,現(xiàn)在來看客戶端:

客戶端代碼就更加簡單,前面我們提到我們可以通過Registry的lookup方法來獲取當前已經(jīng)綁定的服務,所以很自然,我們首先要獲得這個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的方法的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI