RMI原理及實現

RMI是遠程方法調用的簡稱,象其名稱暗示的那樣,它能夠幫助我們查找並執行遠程對象的方法。通俗地說,遠程調用就象將一個class放在A機器上,然後在B機器中調用這個class的方法。

  我個人認爲,儘管RMI不是唯一的企業級遠程對象訪問方案,但它卻是最容易實現的。與能夠使不同編程語言開發的CORBA不同的是,RMI是一種純Java解決方案。在RMI中,程序的所有部分都由Java編寫。

  在看本篇文章時,我假定讀者都已經具備了較紮實的Java基礎知識,在這方面有欠缺的讀者請自行閱讀有關資料。

  概念

  我在前面已經提到,[color=red]RMI是一種遠程方法調用機制(rpc)[/color],其過程對於最終用戶是透明的:在進行現場演示時,如果我不說它使用了RNI,其他人不可能知道調用的方法存儲在其他機器上。

[color=red]1:當然了,二臺機器上必須都安裝有Java虛擬機(JVM)。[/color]
[color=red]2:其他機器需要調用的對象必須被導出到遠程註冊服務器,這樣才能被其他機器調用[/color]。

因此,如果機器A要調用機器B上的方法,則機器B必須將該對象導出到其遠程註冊服務器。[code]註冊服務器是服務器上運行的一種服務,它幫助客戶端遠程地查找和訪問服務器上的對象[/code]。一個對象只有導出來後,然後才能實現RMI包中的遠程接口。例如,如果想使機器A中的Xyz對象能夠被遠程調用,它就必須實現遠程接口。

  [color=red]RMI需要使用佔位程序和框架,佔位程序在客戶端,框架在服務器端。[/color]

在調用遠程方法時,我們無需直接面對存儲有該方法的機器。

  在進行數據通訊前,還必須做一些準備工作。佔位程序就象客戶端機器上的一個本機對象,它就象服務器上的對象的代理,向客戶端提供能夠被服務器調用的方法。然後,Stub就會向服務器端的Skeleton發送方法調用,Skeleton就會在服務器端執行接收到的方法。

  Stub和Skeleton之間通過遠程調用層進行相互通訊,[color=red]遠程調用層遵循TCP/IP協議收發數據。[/color](??跨防火牆)
下面我們來大致瞭解一種稱爲爲“綁定”的技術。

  客戶端無論何時要調用服務器端的對象,你可曾想過他是如何告訴服務器他想創建什麼樣的對象嗎?這正是“綁定”的的用武之地。在服務器端,我們將一個字符串變量與一個對象聯繫在一起(可以通過方法來實現),客戶端通過將那個字符串傳遞給服務器來告訴服務器它要創建的對象,這樣服務器就可以準確地知道客戶端需要使用哪一個對象了。
[color=red]所有這些字符串和對象都存儲在的遠程註冊服務器中。 [/color]

  在編程中需要解決的問題

  在研究代碼之前,我們來看看必須編寫哪些代碼:

  ·遠程對象:這個接口只定義了一個方法。我們應當明白的是,這個接口並非總是不包括方法的代碼而只包括方法的定義。遠程對象包含要導出的每個方法的定義,它還實現Java.rmi中的遠程接口。

  ·遠程對象實現:這是一個實現遠程對象的類。如果實現了遠程對象,就能夠覆蓋該對象中的所有方法,因此,遠程對象的實現類將真正包含我們希望導出的方法的代碼。

  ·遠程服務器:這是一個作爲服務器使用的類,它是相對於要訪問遠程方法的客戶端而言的。它存儲着綁定的字符串和對象。

  ·遠程客戶端:這是一個幫助我們訪問遠程方法提供幫助的類,它也是最終用戶。我們將使用查找和調用遠程方法的方法在該類中調用遠程方法。
發佈了0 篇原創文章 · 獲贊 0 · 訪問量 3063
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章