1. 程式人生 > >分散式物件模型框架--RMI

分散式物件模型框架--RMI

分散式物件模型框架RMI:

RMI(Remote Method Invoke):
	概念:RMI是jdk提供的遠端方法呼叫框架,它封裝了所有底層通訊的細節,並且解決了編組、分散式垃圾收集、安全檢查以及併發性等通用問題。
	說明:RMI框架要求客戶端和服務端都是Java應用。

	原理:RMI採用客戶端/服務端通訊的方式,在伺服器上部署提供服務的遠端物件,客戶端請求訪問伺服器上遠端物件的方法。
		詳解:
			1)RMI框架使用代理來負責客戶端與遠端物件之間通過Socket進行通訊的細節。
			2)RMI框架為遠端物件分別生成了客戶端代理和服務端代理。客戶端的代理稱為存根(Stub),服務端的代理稱為骨架(Skeleton)
			3)當客戶端呼叫遠端物件的一個方法時,實際上呼叫的是本地存根物件中相應的方法,存根物件與遠端物件具有同樣的介面。
			4)服務端接收到客戶端的請求資訊,然後由相應的骨架物件來處理這一請求資訊;注:骨架物件雖然起著代理的作用,但是與存根物件不同,骨架物件沒有實現遠端介面。
		說明:
			1)存根物件把:被訪問的遠端物件的名字、被呼叫的方法的描述、編組後的引數的位元組序列等請求資訊傳送給伺服器。
				注:存根採用一種與平臺無關的編碼方式,把方法的引數編碼為位元組序列,這個編碼過程稱為引數編組。RMI主要採用java的序列化機制進行引數編組。
			2)骨架物件執行以下操作:
				反編組引數:把引數的位元組序列反編碼為引數
				定位要訪問的遠端物件
				呼叫遠端物件的相應方法
				獲取方法呼叫產生的返回值或者異常,然後對它進行編組
				把編組後的返回值或者異常傳送給客戶。
			3)存根物件接收到伺服器傳送過來的編組後的返回值或異常,通過反編組獲取到呼叫遠端方法的返回結果。
			4)從java.rmi.server.codebase屬性指定的位置動態載入相關的類檔案:
				1>當客戶端試圖呼叫遠端物件的方法時,如果在客戶端還不存在遠端物件所依賴的類檔案(如:遠端方法的引數和返回值對應的類檔案),客戶端會從java.rmi.server.codebase系統屬性指定的位置去動態載入該類檔案。
				2>同樣,當伺服器端訪問客戶端的遠端物件時,如果伺服器端不存在相關的類檔案,伺服器端就會從java.rmi.server.codebase屬性指定的位置動態載入相關的類檔案。
				3>當伺服器向rmiregistry註冊遠端物件時,rmiregistry也會從java.rmi.server.codebase屬性指定的位置動態載入相關的遠端介面的類檔案。
	
	相關概念:
		1)把分佈在不同節點上的物件之間傳送的訊息轉換為位元組序列,這一過程稱為編組(marshalling)