什么是RMI?為什么要使用RMI框架显晶?

大家好贷岸,我是IT修真院深圳分院第5期學(xué)員,一枚正直善良的JAVA程序員磷雇。

今天給大家分享一下偿警,修真院官網(wǎng)JAVA任務(wù)8中,什么是RMI唯笙?為什么要使用RMI框架螟蒸?

一、背景介紹



什么是RMI

RMI是Java的一組擁護(hù)開發(fā)分布式應(yīng)用程序的API崩掘。RMI使用Java語言接口定義了遠(yuǎn)程對象七嫌,它集合了Java序列化和Java遠(yuǎn)程方法協(xié)議(Java Remote Method Protocol)。


RMI有什么用

RMI用于不同Java虛擬機(jī)之間的通信苞慢,這些虛擬機(jī)可以在不同的主機(jī)上诵原、也可以在同一個主機(jī)上;一個虛擬機(jī)中的對象調(diào)用另一個虛擬上中的對象的方法,只不過是允許被遠(yuǎn)程調(diào)用的對象要通過一些標(biāo)志加以標(biāo)識绍赛。RMI中的核心是遠(yuǎn)程對象(remote object)蔓纠,除了對象本身所在的虛擬機(jī),其他虛擬機(jī)也可以調(diào)用此對象的方法吗蚌,而且這些虛擬機(jī)可以不在同一個主機(jī)上腿倚。每個遠(yuǎn)程對象都要實現(xiàn)一個或者多個遠(yuǎn)程接口來標(biāo)識自己,聲明了可以被外部系統(tǒng)或者應(yīng)用調(diào)用的方法



RMI的通信模型

從方法調(diào)用角度來看蚯妇,RMI要解決的問題敷燎,是讓客戶端對遠(yuǎn)程方法的調(diào)用可以相當(dāng)于對本地方法的調(diào)用而屏蔽其中關(guān)于遠(yuǎn)程通信的內(nèi)容,即使在遠(yuǎn)程上箩言,也和在本地上是一樣的懈叹。

實際上,客戶端只與代表遠(yuǎn)程主機(jī)中對象的Stub對象進(jìn)行通信分扎,絲毫不知道Server的存在澄成。客戶端只是調(diào)用Stub對象中的本地方法墨状,Stub對象是一個本地對象,它實現(xiàn)了遠(yuǎn)程對象向外暴露的接口菲饼,也就是說它的方法和遠(yuǎn)程對象暴露的方法的簽名是相同的肾砂。客戶端認(rèn)為它是調(diào)用遠(yuǎn)程對象的方法宏悦,實際上是調(diào)用Stub對象中的方法镐确。可以理解為Stub對象是遠(yuǎn)程對象在本地的一個代理饼煞,當(dāng)客戶端調(diào)用方法的時候源葫,Stub對象會將調(diào)用通過網(wǎng)絡(luò)傳遞給遠(yuǎn)程對象。

二砖瞧、知識剖析



RMI遠(yuǎn)程調(diào)用步驟

1息堂,客戶對象調(diào)用客戶端輔助對象上的方法

2,客戶端輔助對象打包調(diào)用信息(變量块促,方法名)荣堰,通過網(wǎng)絡(luò)發(fā)送給服務(wù)端輔助對象

3,服務(wù)端輔助對象將客戶端輔助對象發(fā)送來的信息解包竭翠,找出真正被調(diào)用的方法以及該方法所在對象

4振坚,調(diào)用真正服務(wù)對象上的真正方法,并將結(jié)果返回給服務(wù)端輔助對象

5斋扰,服務(wù)端輔助對象將結(jié)果打包渡八,發(fā)送給客戶端輔助對象

6啃洋,客戶端輔助對象將返回值解包,返回給客戶對象

7呀狼,客戶對象獲得返回值



如何實現(xiàn)一個RMI程序

1.創(chuàng)建遠(yuǎn)程接口, 并且繼承java.rmi.Remote接口损离。

2.實現(xiàn)遠(yuǎn)程接口哥艇,并且繼承:UnicastRemoteObject

3.創(chuàng)建服務(wù)器程序: createRegistry方法注冊遠(yuǎn)程對象,暴露一個監(jiān)聽

4.創(chuàng)建客戶端程序僻澎,通過ip和端口連接到指定的服務(wù)器貌踏,并且將數(shù)據(jù)做封裝(序列化)

5.服務(wù)器端收到請求,先反序列化窟勃。再進(jìn)行業(yè)務(wù)邏輯處理祖乳。把返回結(jié)果序列化返回



三、常見問題



1秉氧、數(shù)據(jù)的傳遞問題

我們都知道在Java程序中引用類型(不包括基本類型)的參數(shù)傳遞是按引用傳遞的眷昆,對于在同一個虛擬機(jī)中的傳遞時是沒有問題的,因為的參數(shù)的引用對應(yīng)的是同一個內(nèi)存空間汁咏,但是對于分布式系統(tǒng)中亚斋,由于對象不再存在于同一個內(nèi)存空間,虛擬機(jī)A的對象引用對于虛擬機(jī)B沒有任何意義攘滩,那么怎么解決這個問題呢?






2漂问、遠(yuǎn)程對象的發(fā)現(xiàn)問題

在調(diào)用遠(yuǎn)程對象的方法之前需要一個遠(yuǎn)程對象的引用,如何獲得這個遠(yuǎn)程對象的引用在RMI中是一個關(guān)鍵的問題



4.解決方案



a栏饮、將引用傳遞更改為值傳遞,也就是將對象序列化為字節(jié)磷仰,然后使用該字節(jié)的副本在客戶端和服務(wù)器之間傳遞抡爹,而且一個虛擬機(jī)中對該值的修改不會影響到其他主機(jī)中的數(shù)據(jù)芒划,在Java中一個對象如果能夠被序列化冬竟,需要滿足下面兩個條件之一:

1民逼、是Java的基本類型

2泵殴、實現(xiàn)java.io.Serializable接口(String類即實現(xiàn)了該接口)


b、在我們?nèi)粘J褂镁W(wǎng)絡(luò)時拼苍,基本上都是通過域名來定位一個網(wǎng)站笑诅,但是實際上網(wǎng)絡(luò)是通過IP地址來定位網(wǎng)站的,因此其中就需要一個映射的過程吆你,域名系統(tǒng)(DNS)就是為了這個目的出現(xiàn)的,在域名系統(tǒng)中通過域名來查找對應(yīng)的IP地址來訪問對應(yīng)的服務(wù)器伤哺。那么對應(yīng)的者祖,IP地址在這里就相當(dāng)于遠(yuǎn)程對象的引用,而DNS則相當(dāng)于一個注冊表(Registry)七问。而域名在RMI中就相當(dāng)于遠(yuǎn)程對象的標(biāo)識符,客戶端通過提供遠(yuǎn)程對象的標(biāo)識符訪問注冊表械巡,來得到遠(yuǎn)程對象的引用。這個標(biāo)識符是類似URL地址格式的.

五芦鳍、編碼實戰(zhàn)



六葛账、擴(kuò)展思考


RMI優(yōu)缺點是什么?

優(yōu)點:可以用于分布式開發(fā)籍琳,避免重復(fù)造輪子

缺點:調(diào)用過程很慢,而且該過程是不可靠的喝峦,容易發(fā)生不可預(yù)料的錯誤,比如網(wǎng)絡(luò)錯誤等

七谣蠢、參考文獻(xiàn)



1.CSDN博客:https://blog.csdn.net/u014001866/article/details/50936246

2.CSDN博客:https://blog.csdn.net/lmy86263/article/details/72594760

八查近、更多討論



Q1、RMI中 如何改變調(diào)用的IP霜威?

答:在服務(wù)器端可以自己設(shè)置

Q2、一般基于什么考慮來拆分婿禽?

答:參考web開發(fā)三層架構(gòu)

Q3、網(wǎng)絡(luò)通信是依靠什么完成的扭倾?

答:socket

今天的分享就到這里啦,歡迎大家提問和探討!

小課堂視頻

PPTPPT

感謝大家觀看

今天的分享就到這里啦驾中,歡迎大家點贊恢筝、轉(zhuǎn)發(fā)巨坊、留言、拍磚~

技能樹.IT修真院

“我們相信人人都可以成為一個工程師趾撵,現(xiàn)在開始,找個師兄暂题,帶你入門究珊,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷媒虽蹋”悬槽。

這里是技能樹.IT修真院瞬浓,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線猿棉,學(xué)習(xí)透明化,成長可見化萨赁,師兄1對1免費指導(dǎo)》醚快來與我一起學(xué)習(xí)吧~

作者:東

鏈接:http://www.reibang.com/p/1ebbafa093b6

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)臣缀,非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末计寇,一起剝皮案震驚了整個濱河市脂倦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赖阻,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棋电,死亡現(xiàn)場離奇詭異苇侵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)于未,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門陡鹃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谎倔,你說我怎么就攤上這事猿推。” “怎么了蹬叭?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵秽五,是天一觀的道長孽查。 經(jīng)常有香客問我坦喘,道長西设,這世上最難降的妖魔是什么答朋? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任梦碗,我火速辦了婚禮,結(jié)果婚禮上洪规,老公的妹妹穿的比我還像新娘。我一直安慰自己斩例,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布柠衍。 她就那樣靜靜地躺著晶乔,像睡著了一般牺勾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上翻具,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天回还,我揣著相機(jī)與錄音,去河邊找鬼柠硕。 笑死,一個胖子當(dāng)著我的面吹牛闻葵,可吹牛的內(nèi)容都是我干的癣丧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼厢钧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了早直?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昧旨,失蹤者是張志新(化名)和其女友劉穎祥得,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體级及,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡饮焦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了转绷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡议经,死狀恐怖谴返,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情籍救,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布蝙昙,位于F島的核電站逼肯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏大刊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一缺菌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耿战,春花似錦焊傅、人聲如沸剂陡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暴浦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歌焦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工循狰, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留券勺,地道東北人灿里。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像儒拂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子社痛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蒜哀,服務(wù)發(fā)現(xiàn)吏砂,斷路器撵儿,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法淀歇,類相關(guān)的語法易核,內(nèi)部類的語法浪默,繼承相關(guān)的語法,異常的語法纳决,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 我想做你懷里的貓岳链,可以一醒來就在你的懷里撒嬌。我想做你懷里的貓掸哑,和你一起看你喜歡的電影,聽你喜歡的頻道苗分。我想做你懷...
    暖心奶茶閱讀 2,497評論 0 0
  • 17歲正青春 懵懂 無知 活力 不羈 荷爾蒙的氣息彌漫又消散來 少男少女們就此蠢蠢欲動 一門心思撲去 文字也只是用...
    原初閱讀 276評論 0 0
  • 膚白貌美投剥,緊身的魚尾裙把好身材展現(xiàn)得淋漓盡致,稍短的頭發(fā)顯得她比實際年齡小一點江锨,粉嫩一些糕篇,這是我見到周周的第一印象...
    芬芬vstar閱讀 1,167評論 2 7