如果所有組件都在同一臺計算機的同一個Java虛擬機的同一個堆空間上執行是最簡單的,但實際中我們面對的往往不是如此單一的情況,如果用戶端只是個能夠執行Java的裝置怎么辦?如果為了安全性的理由只能讓服務器上的程序存取數據庫怎么辦?
我們知道,大多數情況下,方法的調用都是發生在相同堆上的兩個對象之間,如果要調用不同機器上的對象的方法呢?
通常,我們從某一臺計算機上面取得另一臺計算機上的信息是通過socket的輸入/輸出流,打開另一臺計算機的socket連接,然后取得outputStream來寫入數據.但如果要調用另一臺計算機上,另一個Java虛擬機上面的對象的方法你?我們當然可以自己定義和設計通信協議來調用,然后通過Socket把執行結果再傳回去,并且還能夠像是對本機的方法調用一樣,也就是說想要調用遠程的對象(像是別的堆上的),卻又要像是一般的調用.
這就是RMI帶給我們的功能.
遠程過程調用的設計
要創建出4種東西:服務器、客戶端、服務器輔助設施和客戶端輔助設施.
1.創建客戶端和服務端應用程序,服務器應用程序時個遠程服務,是個帶有客戶端會調用的方法的對象
2.創建客戶端和服務器端的輔助設施(helper)他們會處理所有客戶端和服務器的底層網絡輸入/輸出細節,讓客戶端和程序好像在處理本地調用一樣.
輔助設施的任務輔助設施是個在實際上執行通信的對象,他們會讓客戶端感覺上好像是在調用本機對象,客戶端對象看起來像是在調用遠程的方法,但實際上它只是在調用本地處理Socket和串流細節的代理.在服務器這端,服務器的輔助設施會通過socket連接來自客戶端設施的要求,解析打包送來的信息,然后調用真正的服務,因此對服務對象來說此調用來自本地.服務的輔助設施取得返回值之后就把它包裝然后送回去(通過socket的輸出串流)給客戶端的輔助設施.客戶端的輔助設施會解開這些信息傳輸給客戶端的對象
調用方法的過程
1.客戶端對象對輔助設施對象調用doBigThing()
2.客戶端輔助設施把調用信息打包通過網絡送到服務器的輔助設施
3.服務端的輔助設施解開來自客戶端輔助設施的信息,并以此調用真正的服務.
這個過程的描述圖如下:
Java RMI提供客戶端和服務器端的輔助設施對象
在Java中,RMI已經幫我們創建好客戶端和服務器端的輔助設施,它也知道如何讓客戶端輔助設施看起來像是真正的服務,也就是說,RMI知道如何提供相同的方法給客戶端調用.
此外,RMI有提供執行期所需全部的基礎設施,包括服務的查詢以及讓客戶端能夠找到與取得客戶端的輔助設施(真正的服務代理人).
使用RMI時,無需編寫任何網絡或輸入/輸出的程序,客戶端對遠程方法的調用就跟對同一個Java虛擬機上的方法調用是一樣的.
一般調用和RMI調用有一點不同,雖然對客戶端來說,此方法調用看起來像是本地的,但是客戶端輔助設施會通過網絡發出調用,此調用最終還是會涉及到socket和串流,一開始是本機調用,代理會把它轉成遠程的.中間的信息是如何從Java虛擬機送到Java虛擬機要看輔助設施對象所用的協議而定.
使用RMI時,必須要決定協議:JRMP或IIOP,JRMP是RMI原生的協議,它是為Java間的遠程調用而設計的,另外一方面,IIOP是為了CORBA而產生的,它讓我們能夠調用Java對象或其它類型的遠程方法,CORBA通常比RMI麻煩,因為若兩端不全都是Java的話,就會產生一堆可怕的轉譯和交談操作.
我們只關心Java對Java的操作,所以會使用相當簡易的RMI.
在RMI中,客戶端的輔助設施稱為stub,而服務器端的輔助設施稱為skeleton.
如何創建遠程服務
1.創建Remote接口
遠程的接口定義了客戶端可以遠程調用的方法,它是個作為服務的多態化類.stub和服務都會實現此接口
2.實現Remote接口
這個是真正執行的類,它實現出定義在該接口上的方法,它是客戶端會調用的對象
3.用rmic產生stub和skeleton
客戶端和服務器都有helper,我們無需創建這些類或產生這些類的源代碼,這都會在執行JDK所附的rmic工具時自動地處理掉
4.啟動RMI registry (rmiregistry)
rmiregistry就像電話薄,用戶會從此處取得代理(客戶端的stub/helper對象)
5.啟動遠程服務
必須讓服務對象開始執行,實現服務的類會起始服務的實例并向RMI Registry注冊,要有注冊后才能對用戶服務.
服務端代碼
定義接口 /**
import java.rmi.Remote;
import java.rmi.RemoteException;
*
* MyRemote.java
*
* 功 能: TODO
* 類 名: MyRemote.java
*
* ver
主站蜘蛛池模板:
久久精品久久精品久久精品
|
一区二区精品视频在线观看
|
亚洲第一视频在线
|
中文字幕一二三区芒果
|
国产精品99久久久久久久
|
国产精品一品二区三区四区18
|
亚洲国产一区二区三区
|
黑人日比
|
日韩激情|
久久55|
露脸各种姿势啪啪的清纯美女
|
国产成人精品午夜
|
一区二区免费看
|
japanesexxxxxxxhd
|
91精品中文字幕
|
日本精品久久久久
|
久草在线资源福利站
|
av成人免费观看
|
久久亚洲春色中文字幕久久
|
91婷婷射
|
亚洲精品一区国产精品丝瓜
|
国产毛毛片一区二区三区四区
|
国产一区精品在线观看
|
激情综合在线观看
|
国产视频在线观看一区二区三区
|
久久久久久亚洲综合影院红桃
|
成人毛片一区
|
午夜精品成人
|
蜜桃网站在线观看
|
黄色一级片免费观看
|
国产精品自拍99
|
国产人成免费爽爽爽视频
|
久久羞羞视频
|
91精品久久久久久久久久久
|
免费一级毛片在线播放不收费
|
欧美成人做爰高潮片免费视频
|
成人不卡在线观看
|
日日草夜夜
|
日产精品久久久一区二区福利
|
国产成人精品网站
|
毛片免费观看视频
|