RMI代表遠(yuǎn)程方法調(diào)用。 這是一種允許位于在一個(gè)系統(tǒng)(JVM)中的對(duì)象訪問(wèn)/調(diào)用在另一個(gè)JVM上運(yùn)行的對(duì)象的機(jī)制。
RMI用于構(gòu)建分布式應(yīng)用程序; 它提供Java程序之間的遠(yuǎn)程通信。 它在java.rmi
包中提供。
在RMI應(yīng)用程序中,我們編寫(xiě)了兩個(gè)程序,一個(gè)服務(wù)器程序(位于服務(wù)器上)和一個(gè)客戶(hù)機(jī)程序(位于客戶(hù)端上)。
下圖顯示了RMI應(yīng)用程序的體系結(jié)構(gòu)。
下面我們來(lái)討論這個(gè)架構(gòu)的組件。
以下幾點(diǎn)總結(jié)了RMI應(yīng)用程序的工作原理 -
remoteRef
的一個(gè)名為invoke()
的方法。 它將請(qǐng)求傳遞到服務(wù)器端的RRL。每當(dāng)客戶(hù)端調(diào)用接受遠(yuǎn)程對(duì)象上的參數(shù)的方法時(shí),在通過(guò)網(wǎng)絡(luò)發(fā)送之前,將參數(shù)捆綁到消息中。 這些參數(shù)可能是原始類(lèi)型或?qū)ο蟆?在原始類(lèi)型的情況下,將參數(shù)放在一起并附加標(biāo)題。 如果參數(shù)是對(duì)象,那么它們被序列化。 這個(gè)過(guò)程被稱(chēng)為編組。
在服務(wù)器端,打包參數(shù)是未分組的,然后調(diào)用所需的方法。這個(gè)過(guò)程被稱(chēng)為解組。
RMI注冊(cè)表是放置所有服務(wù)器對(duì)象的命名空間。 每次服務(wù)器創(chuàng)建一個(gè)對(duì)象時(shí),它會(huì)使用RMIregistry
(使用bind()
或reBind()
方法)注冊(cè)此對(duì)象。 這些使用叫作綁定名稱(chēng)(bind name)的唯一名稱(chēng)進(jìn)行注冊(cè)。
要調(diào)用遠(yuǎn)程對(duì)象,客戶(hù)端需要該對(duì)象的引用??蛻?hù)端使用其綁定名稱(chēng)(使用lookup()
方法)從注冊(cè)表中獲取對(duì)象。
下圖說(shuō)明了整個(gè)過(guò)程 -
以下是RMI的目標(biāo) -