回答
RPC是基於C的,因此它具有結構化編程語義,另一方面,RMI是基於Java的技術並且是面向對象的。
使用RPC,您可以調用導出到服務器的遠程函數,在RMI中可以引用遠程對象並調用它們的方法,還可以傳遞並返回更多可以在多個JVM實例中分發的遠程對象引用。它更強大。
當需要開發比純粹的客戶端 - 服務器架構更復雜的東西時,RMI脫穎而出。通過網絡分散對象非常容易,使所有客戶端都能夠進行通信,而無需明確建立單獨的連接。
RPC與RMI的主要區別在於RMI涉及到對象。代替使用代理函數遠程調用過程,我們改爲使用代理對象。
RMI具有更高的透明度,即由於技術集成到語言中,因此可以利用對象,引用,繼承,多態性和異常。
RMI也比RPC更先進的,允許動態調用,其中接口可以在運行時改變,並且對象適配,它提供了一個抽象的附加層。
RPC和RMI之間唯一真正的區別在於RMI中包含對象:不是通過代理函數調用函數,而是通過代理調用方法。
RMI和RPC之間的差別在於:
- RMI顧名思義遠程方法調用:它調用一個方法或對象。並且
- RPC它調用一個函數。
您在「方法」和「函數」之間隱含地強調了哪些差異,但沒有澄清?在Java中沒有函數......但在OOP中,據我所知,它們是同義詞,「調用」和「調用」也是同義詞。 – mins 2014-08-29 05:39:33
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)
Remote Procedure Call(RPC)是一個進程間通信,它允許在駐留在本地或遠程機器上的另一個進程中調用一個函數。
遠程方法調用(RMI)是一個API,它實現在RPC用java支持面向對象的範式。
你能想到調用RPC的是像調用C程序。 RPC支持原始數據類型,其中RMI支持將方法參數/返回類型作爲java對象。
與RPC不同,RMI很容易編程。您可以根據對象來思考業務邏輯,而不是一系列基本數據類型。
RPC是語言不像RMI,這是僅限於Java的中性
RMI是稍微慢一點的RPC
在C
RPC是基於C.It可以調用遠程過程,使它看起來像本地call.RPC的舊協議處理是通過遠程調用服務器和獲取結果客戶端的複雜性。
Java RMI的也達到了同樣的事情,但略有differently.It用來遠程對象。所以引用,它的作用是將其發送到遠程對象的引用非常久遠的方法的名稱invoke.It更好,因爲它在大型程序的情況下會產生更清晰的代碼,並且通過網絡分發對象還可以使多個客戶端調用服務器中的方法,而不是單獨建立每個連接。
- 1. Java RMI和JMS有什麼區別?
- 2. Erlang的Ports和RPC有什麼區別?
- 3. RPC和IPC有什麼區別嗎?
- 4. XML-RPC和SOAP有什麼區別?
- 5. RMI和Corba有何區別?
- 6. `java -version`和`java -showversion`有什麼區別?
- 7. java HttpsURLConnection和python HTTPSConnection有什麼區別?
- 8. Java 8:Instant和LocalDateTime有什麼區別?
- 9. Java中boolean和Boolean有什麼區別?
- 10. Java中> =和=>有什麼區別?
- 11. Java - LibGDX - isKeyPressed和isKeyJustPressed有什麼區別?
- 12. !=和=!有什麼區別!在Java中?
- 13. java 8 ZonedDateTime和OffsetDateTime有什麼區別?
- 14. Java包:`oracle.AQ`和`oracle.jdbc.aq`有什麼區別?
- 15. Eclipse for Java和RCP有什麼區別?
- 16. Java EE和Asp.net有什麼區別
- 17. PHP和Java有什麼區別?
- 18. 繼承和java豆有什麼區別?
- 19. Golang的net/rpc包和gRPC框架有什麼區別?
- 20. CORBA和RMI的區別
- 21. 有什麼區別`和$(Bash中有什麼區別?
- 22. ==和===有什麼區別?
- 23. ==和===有什麼區別?
- 24. 有什麼區別? :和||
- 25. ==和===有什麼區別?
- 26. '=='和'==='有什麼區別?
- 27. `&`和`ref`有什麼區別?
- 28. 有什麼區別:。!和:r!?
- 29. | 0和~~有什麼區別?
- 30. Appender和〜有什麼區別?
這是不正確的。 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
@MATC我認爲你鏈接的文章指出,這個名字的原因從「JAX-RPC」改爲「JAX-WS 「的確如此,原來的名稱並不準確,因爲該規範涉及的不僅僅是傳統意義上的」RPC「。所以這個答案,談論RPC傳統意義,仍然是正確的。 – 2016-05-11 08:55:38
是的,我的意思是RPC起源於C/Unix世界(至少是最常見的RPC實現,ONCRPC),因此它是在該計算模型之後建模的;當然沒有什麼可以阻止在任何其他編程語言的基礎上實現它的誤導性答案 – fortran 2016-05-12 15:13:55