Java 遠程調用與分佈式通信的區別

 同進程查找JDNI服務
   
    比如說我們通過JNDI來查找Tomcat中配置的DataSource,代碼如下
   
    Context context = new InitialContext();
   
    DataSource ds = (DataSource)context.lookup(“java:/comp/env/jdbc/oracleds”);
   
    將這兩行代碼放到JSP頁面中,在new InitialContext()之後,就能在JNDI服務上查到DataSource
   
    這是因爲JSP和JNDI服務是在同一個進程裏的。但如果不是同一個進程,則不能new InitialContext()
   
    這就好像是兩間屋子裏面的資源無法共享一樣,除非穿牆,否則是無法拿到對面屋子裏的資源的
   
    所以在main()方法中是無法有效的執行這兩行代碼的
   
    因爲在運行main()方法時,它會在一個進程中啓動JVM來解析class,而Tomcat那裏又是另外一個進程
   
    所以在這兩個進程之間,只是通過簡單的new InitialContext()是找不到JNDI服務的,事實上這個過程就是在遠程調用
   
    其實所謂的遠程,並不是說跨機器、跨網絡就是遠程,只要是兩個進程之間的調用,就算是遠程調用了
   
    也就是說只要是不在同一個JVM裏面(更準確的來說是不在同一個地址空間內)的調用,它就是遠程調用
   
    也就是說如果我們在同一個機器上,啓動兩個進程,然後進行互相調用,那麼這個過程就已經是遠程調用了
   
    文章來源:愛上123 原文地址:http://www.ishang123.com/jishubowen/java/2012-09-20/235.html
   
    分佈式通信的基本原理
   
    主要是使用客戶端上的Stub(存根)和遠程對象上的Skeleton(骨架)作爲中介,來實現分佈式通信的
   
    在客戶端會有一個叫做Stub(存根)的東西,其實現採用的是非常典型的代理模式,是遠程對象在客戶端的代理
   
    Stub會封裝所交互的數據的訪問細節(如何壓縮、壓包、編碼等),然後通過相應的協議與Skeleton(骨架)交換數據
   
    對於Java領域的分佈式通信技術,較常見的有EJB技術、CORBA技術、WebService技術等等
   
    如果是EJB技術,那麼Stub就會採用RMI-IIOP協議來傳送數據給Skeleton
   
    如果是CORBA技術,那麼Stub就會採用IIOP協議來傳送數據給Skeleton
   
    如果是WebServices技術,那麼Stub就會通過SOAP(搜魄)協議來傳送數據給Skeleton
   
    也就是說Stub會按照特定協議將信息傳送給Skeletion
   
    而Skeleton會將Stub傳送過來的數據解析成特定的語言對象併發送給遠程對象,即服務端


    
    比如說服務端是採用Java開發的,那麼Skeleton就會將接收到的數據解析成Java對象,再傳送給服務端
   
    同理若服務端是採用C#開發的,那麼Skeleton就會將接收到的數據解析成C#對象,再傳送給服務端
   
    接着服務端就會返回信息給客戶端,於是Skeleton就會將所要返回的信息進行壓縮編碼並通過相應的協議傳送給Stub
   
    接着Stub就會將Skeleton傳送過來的信息解開,再傳送給客戶端,所以客戶端就獲得了相應的服務端的返回信息了
   
    這裏的客戶端對象和遠程對象是位於不同的JVM中的,或者說是不同的系統平臺中,此即分佈式通信
   
    它主要就是靠Stub和Skeleton來通訊,說白了,分佈式通信也就是Stub和Skeleton之間的通信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章