2010-04-28 109 views

回答

108

RPC是基於C的,因此它具有結構化編程語義,另一方面,RMI是基於Java的技術並且是面向對象的。

使用RPC,您可以調用導出到服務器的遠程函數,在RMI中可以引用遠程對象並調用它們的方法,還可以傳遞並返回更多可以在多個JVM實例中分發的遠程對象引用。它更強大。

當需要開發比純粹的客戶端 - 服務器架構更復雜的東西時,RMI脫穎而出。通過網絡分散對象非常容易,使所有客戶端都能夠進行通信,而無需明確建立單獨的連接。

+9

這是不正確的。 RPC也是基於Java的。 JAX-RPC 1.1被替換爲2.0,然後被重命名爲JAX-WS。在Java中,當您談論RPC時,您正在談論SOAP和Web服務。這是一篇關於JAX-RPC 1.1更改爲JAX-WS的文章。 http://www.ibm.com/developerworks/library/ws-tip-jaxwsrpc/ – MattC 2015-04-10 14:19:52

+0

@MATC我認爲你鏈接的文章指出,這個名字的原因從「JAX-RPC」改爲「JAX-WS 「的確如此,原來的名稱並不準確,因爲該規範涉及的不僅僅是傳統意義上的」RPC「。所以這個答案,談論RPC傳統意義,仍然是正確的。 – 2016-05-11 08:55:38

+0

是的,我的意思是RPC起源於C/Unix世界(至少是最常見的RPC實現,ONCRPC),因此它是在該計算模型之後建模的;當然沒有什麼可以阻止在任何其他編程語言的基礎上實現它的誤導性答案 – fortran 2016-05-12 15:13:55

6

RMI或遠程方法Invokation是 非常類似於RPC或遠程 過程調用在客戶端 同時發送的代理對象(或存根),以 服務器然而微妙 不同的是,客戶端RPC 調用功能通過代理 函數和RMI調用方法 通過代理功能。 RMI是 認爲稍優,因爲它是 面向對象的版本的RPC。

here

欲瞭解更多信息和示例,請致電look here

+5

方法是在java中調用的函數,函數是在c/C++中調用的方法。那麼還有什麼區別? – starcorn 2011-02-09 07:07:18

+1

區別在於(在實例方法的情況下),有一個調用對象。調用對象或者需要被髮送(連同它的代碼),或者需要在移除服務器上運行,但有一種方法可以在本地服務器上引用。 – 2012-02-09 13:40:16

+0

忽略具體的編程語言如何處理方法與函數,其文學含義是函數返回一個值,而方法修改狀態。 – Dan 2015-04-05 18:28:51

31

RPC與RMI的主要區別在於RMI涉及到對象。代替使用代理函數遠程調用過程,我們改爲使用代理對象

RMI具有更高的透明度,即由於技術集成到語言中,因此可以利用對象,引用,繼承,多態性和異常。

RMI也比RPC更先進的,允許動態調用,其中接口可以在運行時改變,並且對象適配,它提供了一個抽象的附加層。

5

RPC和RMI之間唯一真正的區別在於RMI中包含對象:不是通過代理函數調用函數,而是通過代理調用方法。

6

RMI和RPC之間的差別在於:

  • RMI顧名思義遠程方法調用:它調用一個方法或對象。並且
  • RPC它調用一個函數。
+1

您在「方法」和「函數」之間隱含地強調了哪些差異,但沒有澄清?在Java中沒有函數......但在OOP中,據我所知,它們是同義詞,「調用」和「調用」也是同義詞。 – mins 2014-08-29 05:39:33

8

1.方法:

RMI使用其中用戶需要知道對象,他需要調用該對象的方法中的面向對象的範例。

RPC不處理對象。而是調用已經建立的特定子程序。

2.工作:

隨着RPC,你會得到一個過程調用,看起來很像一個本地電話。 RPC處理將呼叫從本地傳遞到遠程計算機所涉及的複雜性。

RMI做了同樣的事情,但RMI傳遞了對象的引用和被調用的方法。

RMI = RPC +對象取向

3.更好之一:

RMI是一個較好的方法相比RPC,尤其是對於較大的程序,因爲它提供了一個清潔器代碼如果出現問題,更容易識別。

4.系統示例:

RPC系統: SUN RPC,DCE RPC

RMI系統: 的Java RMI,CORBA,微軟DCOM/COM +,SOAP(簡單對象訪問Protocol)

6

Remote Procedure Call(RPC)是一個進程間通信,它允許在駐留在本地或遠程機器上的另一個進程中調用一個函數。

遠程方法調用(RMI)是一個API,它實現在RPC用java支持面向對象的範式。

  1. 你能想到調用RPC的是像調用C程序。 RPC支持原始數據類型,其中RMI支持將方法參數/返回類型作爲java對象。

  2. 與RPC不同,RMI很容易編程。您可以根據對象來思考業務邏輯,而不是一系列基本數據類型。

  3. RPC是語言不像RMI,這是僅限於Java的中性

  4. RMI是稍微慢一點的RPC

在C

1
看看這個 article的RPC實現

RMI或遠程方法調用與RPC或遠程過程調用非常相似,因爲客戶端都將代理對象(或存根)發送到服務器,但細微區別在於客戶端RPC調用FUNCTIONS th粗略的代理函數和RMI通過代理函數調用方法。 RMI被認爲稍微優越,因爲它是RPC的面向對象的版本。

+0

客戶端不會在RPC或RMI中將代理對象(或存根)發送到服務器。客戶端在RMI中有一個* local *代理對象,在RPC中有一個包裝函數。 – EJP 2016-03-23 07:34:48

2

RPC是基於C.It可以調用遠程過程,使它看起來像本地call.RPC的舊協議處理是通過遠程調用服務器和獲取結果客戶端的複雜性。

Java RMI的也達到了同樣的事情,但略有differently.It用來遠程對象。所以引用,它的作用是將其發送到遠程對象的引用非常久遠的方法的名稱invoke.It更好,因爲它在大型程序的情況下會產生更清晰的代碼,並且通過網絡分發對象還可以使多個客戶端調用服務器中的方法,而不是單獨建立每個連接。