java RMI 源碼總結(我的理解)

明天早上詳細寫下兩個過程:java

一、初始化過程(服務器)git

二、客戶端調用過程(包括客戶端流程、調用服務端流程、返回客戶端流程)服務器

  • 當客戶端經過RMI註冊表找到一個遠程接口的時候,所獲得的實際上是遠程接口的一個動態代理對象。
  • 當客戶端調用其中的方法的時候,方法的參數對象會在序列化以後,傳輸到服務器端。
  • 服務器端接收到以後,進行反序列化獲得參數對象。
  • 並使用這些參數對象,在服務器端調用實際的方法。
  • 調用的返回值Java對象通過序列化以後,再發送回客戶端。
  • 客戶端再通過反序列化以後獲得Java對象,返回給調用者。
  • 這中間的序列化過程對於使用者來講是透明的,由動態代理對象自動完成

除了序列化以外,RMI還使用了動態類加載技術代理

  • 當須要進行反序列化的時候,若是該對象的類定義在當前JVM中沒有找到,RMI會嘗試從遠端下載所需的類文件定義
  • 能夠在RMI程序啓動的時候,經過JVM參數java.rmi.server.codebase來指定動態下載Java類文件的URL。 

具體執行筆記參看代碼註釋code

相關文章
相關標籤/搜索