最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用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)文章

  • java類(lèi)的定義與使用舉例詳解

    java類(lèi)的定義與使用舉例詳解

    這篇文章主要給大家介紹了關(guān)于java類(lèi)的定義與使用的相關(guān)資料,類(lèi)的方法是用來(lái)定義類(lèi)的行為,在方法中通過(guò)操作類(lèi)的成員變量、編寫(xiě)業(yè)務(wù)邏輯、返回 結(jié)果等實(shí)現(xiàn)類(lèi)的業(yè)務(wù)行為,需要的朋友可以參考下
    2023-11-11
  • kafka 重新分配partition和調(diào)整replica的數(shù)量實(shí)現(xiàn)

    kafka 重新分配partition和調(diào)整replica的數(shù)量實(shí)現(xiàn)

    當(dāng)需要提升Kafka集群的性能和負(fù)載均衡時(shí),可通過(guò)kafka-reassign-partitions.sh命令手動(dòng)重新分配Partition,增加節(jié)點(diǎn)后,可以將Topic的Partition的Leader節(jié)點(diǎn)均勻分布,以提高寫(xiě)入和消費(fèi)速度,感興趣的可以了解一下
    2022-03-03
  • Springboot整合多數(shù)據(jù)源配置流程詳細(xì)講解

    Springboot整合多數(shù)據(jù)源配置流程詳細(xì)講解

    這篇文章主要介紹了Springboot整合多數(shù)據(jù)源配置流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-03-03
  • SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例

    SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例

    Feign是一個(gè)基于注解的HTTP客戶(hù)端庫(kù),它允許您將HTTP請(qǐng)求轉(zhuǎn)換為聲明式的Java接口,本文主要介紹了SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用的使用示例,感興趣的可以了解一下
    2023-09-09
  • java 中復(fù)合機(jī)制的實(shí)例詳解

    java 中復(fù)合機(jī)制的實(shí)例詳解

    這篇文章主要介紹了java 中復(fù)合機(jī)制的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能了解繼承和復(fù)合的區(qū)別并應(yīng)用復(fù)合這種機(jī)制,需要的朋友可以參考下
    2017-09-09
  • 通過(guò)Java代碼技巧改善性能

    通過(guò)Java代碼技巧改善性能

    在本篇文章里小編給大家分享了關(guān)于通過(guò)Java代碼技巧改善性能的相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。
    2019-05-05
  • Spring實(shí)現(xiàn)對(duì)象注入的三種方法詳解

    Spring實(shí)現(xiàn)對(duì)象注入的三種方法詳解

    這篇文章主要為大家學(xué)習(xí)介紹了Spring中實(shí)現(xiàn)對(duì)象注入的三種常用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-07-07
  • 基于Java?GUI?事件處理方式

    基于Java?GUI?事件處理方式

    這篇文章主要介紹了基于Java?GUI?事件處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中判斷字符串是中文或者英文的工具類(lèi)分享

    Java中判斷字符串是中文或者英文的工具類(lèi)分享

    這篇文章主要介紹了Java中判斷字符串是中文或者英文的工具類(lèi)分享,本文直接給出代碼,相關(guān)說(shuō)明請(qǐng)看代碼的注釋,需要的朋友可以參考下
    2014-10-10
  • 使用Feign實(shí)現(xiàn)微服務(wù)間文件下載

    使用Feign實(shí)現(xiàn)微服務(wù)間文件下載

    這篇文章主要為大家詳細(xì)介紹了使用Feign實(shí)現(xiàn)微服務(wù)間文件下載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評(píng)論

吴川市| 河北省| 古蔺县| 连江县| 佛山市| 南阳市| 双柏县| 汝阳县| 南江县| 全椒县| 肇州县| 德令哈市| 叶城县| 乐业县| 福建省| 浙江省| 台湾省| 津市市| 商南县| 古浪县| 工布江达县| 饶河县| 库伦旗| 新和县| 浮山县| 新乡市| 二连浩特市| 瓦房店市| 乌兰察布市| 日土县| 兴安县| 长白| 梁河县| 准格尔旗| 嘉鱼县| 铜川市| 定远县| 彭阳县| 沧源| 东宁县| 铜陵市|