你編過程序吧?你程序里有函數或方法間的調用吧?
比如你寫了兩個函數fa和fb,在fa里肯定可以調用fb,這個可以理解吧?好了,鋪墊完了。接下來入正題: 別人寫了個程序,程序里有個函數rf,而且這個程序是獨立運行的。你自己寫程序時想調用這個rf,怎么辦?rpc就是為了解決這個問題而出現的技術。遠程過程調用就是一種在兩個原本相互獨立的進程間建立一種類似於單個程序內函數間調用的函數調用機制。這樣,不僅一個程序內的函數可以相互調用,不同程序間的函數也可以相互調用了。 至於用途,你可以從程序內函數調用的用途出發進行思考。首先是可以直接利用別的程序的部分功能,這是最基礎的。更重要的,利用rpc可以實現系統的分布式架構,一方面有些功能比較相關應該放到一起實現,一方面物理因素的原因要求系統分解為多機實現,因此有的功能實現為了一個機器上的進程,而另外的功能實現為在另外機器上的進程,這兩個進程間的協同和信息交互就可以通過rpc來實現。 另外,有些現成系統所設計的擴展方式就是要通過rpc實現,這時你就需要通過它所選擇的rpc協議編程方式對原系統進行功能擴展
樓上說的沒錯,我也舉個例子。你操作你自己電腦硬盤上的文件,是個方法,和訪問網絡上的文件,在使用上沒什么區別,但實際實現上存在差異。大體的差異你肯定能理解。至少有各種網絡協議吧。rpc就是類似的東西。說來說去,就是不同計算主體之間數據協同問題。無非傳統編寫程序,函數和函數之間的調用,數據的協同很容易,基本在你的代碼設計時,就考慮到了數據空間的設計和調用,甚至沒有這個概念,只有局部變量和全局變量的概念。而跨進程的相互協同運行,則就多了數據協同的問題。有同步也有異步,不過總有同步點
RPC,就是將數據序列化之后傳遞給接收的服務器,然后獲取一個序列化后的返回值。
在網絡通信中,不管是TCP 還是UDP,我們都要在傳輸層上設計自己的應用層協議,使得前后端的數據可以相互通信傳輸一個可以識別的內容。
后來,人們期望能夠更方便一點地讓前后端進行交互,於是提出了RPC,就像調用函數一樣來讓前后端來進行通信,屏蔽掉復雜的應用層協議。