溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java中RMI的使用方法

發(fā)布時(shí)間:2021-06-25 14:10:12 來(lái)源:億速云 閱讀:165 作者:chen 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容介紹了“Java中RMI的使用方法”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

  RMI 介紹

  RMI (Remote Method Invocation) 模型是一種分布式對(duì)象應(yīng)用,使用 RMI 技術(shù)可以使一個(gè) JVM 中的對(duì)象,調(diào)用另一個(gè) JVM 中的對(duì)象方法并獲取調(diào)用結(jié)果。這里的另一個(gè) JVM 可以在同一臺(tái)計(jì)算機(jī)也可以是遠(yuǎn)程計(jì)算機(jī)。因此,RMI 意味著需要一個(gè) Server 端和一個(gè) Client 端。

  Server 端通常會(huì)創(chuàng)建一個(gè)對(duì)象,并使之可以被遠(yuǎn)程訪問(wèn)。

  這個(gè)對(duì)象被稱為遠(yuǎn)程對(duì)象。

  Server 端需要注冊(cè)這個(gè)對(duì)象可以被 Client 遠(yuǎn)程訪問(wèn)。

  Client 端調(diào)用可以被遠(yuǎn)程訪問(wèn)的對(duì)象上的方法,Client 端就可以和 Server 端進(jìn)行通信并相互傳遞信息。

  說(shuō)到這里,是不是發(fā)現(xiàn)使用 RMI 在構(gòu)建一個(gè)分布式應(yīng)用時(shí)十分方便,它和 RPC 一樣可以實(shí)現(xiàn)分布式應(yīng)用之間的互相通信,甚至和現(xiàn)在的微服務(wù)思想都十分類似。

  RMI 工作原理

  正所謂 “知其然知其所以然”,在開(kāi)始編寫 RMI 代碼之前,有必要了解一下 RMI 的工作原理,RMI 中 Client 端是和 Server 端是如何通信的呢?

  下圖的可以幫助我們理解RMI 的工作流程。

  Client 端有一個(gè)被稱 Stub 的東西,有時(shí)也會(huì)被成為存根,它是 RMI Client 的代理對(duì)象,Stub 的主要功能是請(qǐng)求遠(yuǎn)程方法時(shí)構(gòu)造一個(gè)信息塊,RMI 協(xié)議會(huì)把這個(gè)信息塊發(fā)送給 Server 端。

  這個(gè)信息塊由幾個(gè)部分組成:

  遠(yuǎn)程對(duì)象標(biāo)識(shí)符。

  調(diào)用的方法描述。

  編組后的參數(shù)值(RMI協(xié)議中使用的是對(duì)象序列化)。

  既然 Client 端有一個(gè) Stub 可以構(gòu)造信息塊發(fā)送給 Server 端,那么 Server 端必定會(huì)有一個(gè)接收這個(gè)信息快的對(duì)象,稱為 Skeleton 。

  它主要的工作是:

  解析信息快中的調(diào)用對(duì)象標(biāo)識(shí)符和方法描述,在 Server 端調(diào)用具體的對(duì)象方法。

  取得調(diào)用的返回值或者異常值。

  把返回值進(jìn)行編組,返回給客戶端 Stub.

  到這里,一次從 Client 端對(duì) Server 端的調(diào)用結(jié)果就可以獲取到了。

  RMI 開(kāi)發(fā)

  通過(guò)上面的介紹,知道了 RMI 的概念以及 RMI 的工作原理,下面介紹 RMI 的開(kāi)發(fā)流程。

  這里會(huì)通過(guò)一個(gè)場(chǎng)景進(jìn)行演示,假設(shè) Client 端需要查詢用戶信息,而用戶信息存在于 Server 端,所以在 Server 端開(kāi)放了 RMI 協(xié)議接口供客戶端調(diào)用查詢。

  RMI Server

  Server 端主要是構(gòu)建一個(gè)可以被傳輸?shù)念?User,一個(gè)可以被遠(yuǎn)程訪問(wèn)的類 UserService,同時(shí)這個(gè)對(duì)象要注冊(cè)到 RMI 開(kāi)放給客戶端使用。

  定義服務(wù)器接口(需要繼承 Remote 類,方法需要拋出 RemoteException)。

  User 對(duì)象在步驟 3 中定義。

  實(shí)現(xiàn)服務(wù)器接口(需要繼承 UnicastRemoteObject 類,實(shí)現(xiàn)定義的接口)。

  定義傳輸?shù)膶?duì)象,傳輸?shù)膶?duì)象需要實(shí)現(xiàn)序列化(Serializable)接口。

  需要傳輸?shù)念愐欢ㄒ獙?shí)現(xiàn)序列化接口,不然傳輸時(shí)會(huì)報(bào)錯(cuò)。IDEA 中如何生成 serialVersionUID,在文章末尾也附上了簡(jiǎn)單教程。鄭州那個(gè)婦科醫(yī)院好www.qudouwy.com

  注冊(cè)( rmiregistry)遠(yuǎn)程對(duì)象,并啟動(dòng)服務(wù)端程序。

  服務(wù)端綁定了 UserService 對(duì)象作為遠(yuǎn)程訪問(wèn)的對(duì)象,啟動(dòng)時(shí)端口設(shè)置為 1900。

  定義傳輸?shù)膶?duì)象,傳輸?shù)膶?duì)象需要實(shí)現(xiàn)序列化(Serializable)接口。

  需要傳輸?shù)念愐欢ㄒ獙?shí)現(xiàn)序列化接口,不然傳輸時(shí)會(huì)報(bào)錯(cuò)。IDEA 中如何生成 serialVersionUID,在文章末尾也附上了簡(jiǎn)單教程。

  注冊(cè)( rmiregistry)遠(yuǎn)程對(duì)象,并啟動(dòng)服務(wù)端程序。

  服務(wù)端綁定了 UserService 對(duì)象作為遠(yuǎn)程訪問(wèn)的對(duì)象,啟動(dòng)時(shí)端口設(shè)置為 1900。

  RMI Client

  相比 Server 端,Client 端就簡(jiǎn)單的多。直接引入可遠(yuǎn)程訪問(wèn)和需要傳輸?shù)念悾ㄟ^(guò)端口和 Server 端綁定的地址,就可以發(fā)起一次調(diào)用。

“Java中RMI的使用方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

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

AI