亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何用java編寫(xiě)一個(gè)rmi

 更新時(shí)間:2019年06月05日 09:11:11   作者:(*-*)浩  
RMI能讓一個(gè)Java程序去調(diào)用網(wǎng)絡(luò)中另一臺(tái)計(jì)算機(jī)的Java對(duì)象的方法,那么調(diào)用的效果就像是在本機(jī)上調(diào)用一樣。下面我們來(lái)詳細(xì)了解一下吧

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

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

提供遠(yuǎn)端訪(fǎng)問(wèn)的時(shí)候,我們首先需要定義遠(yuǎn)端能夠訪(fǎng)問(wèn)哪些東西,在Java中,定義這類(lèi)接口需要實(shí)現(xiàn)Remote接口

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

定義完接口之后,這些功能是需要我們自己在Server端實(shí)現(xiàn)的,因此,聲明一個(gè)類(lèi)實(shí)現(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;
}
}

實(shí)現(xiàn)完這個(gè)方法之后,有一個(gè)問(wèn)題是,怎么運(yùn)行,既然是遠(yuǎn)端訪(fǎng)問(wèn),肯定得有端口號(hào),肯定得有實(shí)例,所以我們還需要注冊(cè)我們的代碼

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

這里有兩個(gè)Java的類(lèi):UnicastRemoteObject和LocateRegistry

一個(gè)接口:Registry

Registry接口:對(duì)簡(jiǎn)單的遠(yuǎn)端對(duì)象提供一個(gè)遠(yuǎn)端接口用于提供存儲(chǔ)和獲取遠(yuǎn)端對(duì)象的引用,而這些是通過(guò)任意的String類(lèi)型的變量名稱(chēng)獲取,bind,unbind,rebind方法是用于更改注冊(cè)的這些名稱(chēng),lookup和list方法是用于查詢(xún)當(dāng)前當(dāng)前已經(jīng)綁定的對(duì)象。

UnicastRemoteObject類(lèi):用于導(dǎo)出一個(gè)遠(yuǎn)端對(duì)象

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

簡(jiǎn)單的服務(wù)端完成了,現(xiàn)在來(lái)看客戶(hù)端:

客戶(hù)端代碼就更加簡(jiǎn)單,前面我們提到我們可以通過(guò)Registry的lookup方法來(lái)獲取當(dāng)前已經(jīng)綁定的服務(wù),所以很自然,我們首先要獲得這個(gè)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"));
}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼

    MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了MyBatis-Plus實(shí)現(xiàn)多數(shù)據(jù)源的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java線(xiàn)程在什么情況下可以終止

    Java線(xiàn)程在什么情況下可以終止

    Thread線(xiàn)程類(lèi)自帶的stop方法,但是jdk不建議使用,因?yàn)閟top方法終止線(xiàn)程只是強(qiáng)行終止,內(nèi)存中部分值可能已發(fā)生變化,并未保證數(shù)據(jù)的一致性,將會(huì)導(dǎo)致線(xiàn)程安全問(wèn)題,那么在什么情況下可以終止線(xiàn)程呢,本篇帶你探究一下
    2022-04-04
  • Java8中Map常用的遍歷方式

    Java8中Map常用的遍歷方式

    這篇文章主要給大家介紹了關(guān)于Java8中Map常用的遍歷方式,map屬于java中的頂級(jí)接口之一,區(qū)別于list,map是鍵值對(duì)的形式存在,需要的朋友可以參考下
    2023-07-07
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):棧

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):棧

    這篇文章主要介紹了Java的數(shù)據(jù)解構(gòu)基礎(chǔ),希望對(duì)廣大的程序愛(ài)好者有所幫助,同時(shí)祝大家有一個(gè)好成績(jī),需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-07-07
  • 詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎

    詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎

    這篇文章主要介紹了詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 子類(lèi)繼承父類(lèi)時(shí)構(gòu)造函數(shù)相關(guān)問(wèn)題解析

    子類(lèi)繼承父類(lèi)時(shí)構(gòu)造函數(shù)相關(guān)問(wèn)題解析

    這篇文章主要介紹了子類(lèi)繼承父類(lèi)時(shí)構(gòu)造函數(shù)相關(guān)問(wèn)題解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot自定義對(duì)象參數(shù)超詳細(xì)介紹作用

    SpringBoot自定義對(duì)象參數(shù)超詳細(xì)介紹作用

    SpringBoot通過(guò)自定義對(duì)象參數(shù),可以實(shí)現(xiàn)自動(dòng)類(lèi)型轉(zhuǎn)換與格式化,并可以級(jí)聯(lián)封裝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • Java利用ffmpeg實(shí)現(xiàn)視頻MP4轉(zhuǎn)m3u8

    Java利用ffmpeg實(shí)現(xiàn)視頻MP4轉(zhuǎn)m3u8

    本文綜合了下網(wǎng)上教程,從ffmpeg工具轉(zhuǎn)碼,ffmpeg視頻播放,java語(yǔ)言操控ffmpeg轉(zhuǎn)碼,轉(zhuǎn)碼后視頻上傳阿里云oss,四個(gè)方面完整記錄下這個(gè)流程,需要的朋友可以參考下
    2024-02-02
  • java 多線(xiàn)程Thread與runnable的區(qū)別

    java 多線(xiàn)程Thread與runnable的區(qū)別

    這篇文章主要介紹了java 多線(xiàn)程Thread與runnable的區(qū)別的相關(guān)資料,java線(xiàn)程有兩種方法繼承thread類(lèi)與實(shí)現(xiàn)runnable接口,下面就提供實(shí)例幫助大家理解,需要的朋友可以參考下
    2017-08-08
  • Spring MVC全局異常實(shí)例詳解

    Spring MVC全局異常實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Spring MVC全局異常的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02

最新評(píng)論