一.RPC的引入
早期單機時代,一臺電腦上運行多個進程,大家各干各的,老死不相往來。假如A進程需要一個畫圖的功能,B進程也需要一個畫圖的功能,程序員就必須為兩個進程都寫一個畫圖的功能。這不是整人么?于是就出現了IPC(Inter-process communication,單機中運行的進程之間的相互通信)。OK,現在A既然有了畫圖的功能,B就調用A進程上的畫圖功能好了,程序員終于可以偷下懶了。
到了網絡時代,大家的電腦都連起來了。以前程序只能調用自己電腦上的進程,能不能調用其他機器上的進程呢?于是就程序員就把IPC擴展到網絡上,這就是RPC(遠程過程調用)了。現在不僅單機上的進程可以相互通信,多機器中的進程也可以相互通信了。
要知道實現RPC很麻煩呀,什么多線程、什么Socket、什么I/O,都是讓咱們普通程序員很頭疼的事情。于是就有牛人開發出RPC框架(比如,CORBA、RMI、Web Services、RESTful Web Services等等)。
通過以上內容,現在可以定義RPC框架的概念了。簡單點講,RPC框架就是可以讓程序員來調用遠程進程上的代碼一套工具。有了RPC框架,咱程序員就輕松很多了,終于可以逃離多線程、Socket、I/O的苦海了。
二.RPC進一步解釋
RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容易。
RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
三.RPC原理圖和對應的步驟:
運行時,一次客戶機對服務器的RPC調用,其內部操作大致有如下十步:
1.調用客戶端句柄;執行傳送參數
2.調用本地系統內核發送網絡消息
3.消息傳送到遠程主機
4.服務器句柄得到消息并取得參數
5.執行遠程過程
6.執行的過程將結果返回服務器句柄
7.服務器句柄返回結果,調用遠程系統內核
8.消息傳回本地主機
9.客戶句柄由內核接收消息
10.客戶接收句柄返回的數據
三.RPC的代碼實現:
?暫時不貼了。。。。。。。回頭有時間再弄。。。
?
本文轉自SummerChill博客園博客,原文鏈接:http://www.cnblogs.com/DreamDrive/p/7505891.html,如需轉載請自行聯系原作者