1. 程式人生 > >Http與RPC通訊協議的比較

Http與RPC通訊協議的比較

OSI網路結構的七層模型

各層的具體描述如下:

  第七層:應用層     定義了用於在網路中進行通訊和資料傳輸的介面 - 使用者程式;提供標準服務,比如虛擬終端、檔案以及任務的傳輸 和處理; 
  第六層:表示層     掩蓋不同系統間的資料格式的不同性; 指定獨立結構的資料傳輸格式; 資料的編碼和解碼;加密和解密;壓縮和 解壓縮 
  第五層:會話層     管理使用者會話和對話; 控制使用者間邏輯連線的建立和結束通話;報告上一層發生的錯誤 
  第四層:傳輸層     管理網路中端到端的資訊傳送; 通過錯誤糾正和流控制機制提供可靠且有序的資料包傳送; 提供面向無連線的數 據包的傳送; 
  第三層:網路層     定義網路裝置間如何傳輸資料; 根據唯一的網路裝置地址路由資料包;提供流和擁塞控制以防止網路資源的損耗 
  第二層:資料鏈路層 定義操作通訊連線的程式; 封裝資料包為資料幀; 監測和糾正資料包傳輸錯誤 
  第一層:物理層      定義通過網路裝置傳送資料的物理方式; 作為網路媒介和裝置間的介面;定義光學、電氣以及機械特性。

 在上述7層中,http協議是應用層協議。HTTP協議是超文字傳送協議(HyperText Transfer Protocol)的縮寫,它是全球資訊網(World Wide Web,www,也簡稱為Web)的基礎。HTTP協議設計之初就是為了實現Web的想法。HTTP協議位於TCP/IP協議棧的應用層。基於HTTP協議的客戶/伺服器模式的資訊交換過程,分四個過程:建立連線、傳送請求資訊、傳送響應資訊、關閉連線。

 

而關於RPC的基本概念介紹如下:


英文原義:Remote Procedure Call Protocol
中文釋義:(RFC-1831)遠過程呼叫協議
   註解:一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通訊程式之間攜帶資訊資料。在OSI網路通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網路分散式多程式在內的應用程式更加輕易。
   RPC採用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,呼叫程序傳送一個有程序引數的呼叫資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀態直到呼叫資訊的到達為止。當一個呼叫資訊到達,伺服器獲得程序引數,計算結果,傳送答覆資訊,然後等待下一個呼叫資訊,最後,客戶端呼叫過程接收答覆資訊,獲得程序結果,然後呼叫執行繼續進行。
RPC資訊協議由兩個不同結構組成:呼叫資訊和答覆資訊。

二者的聯絡是:


RPC OVER HTTP

Microsoft RPC-over-HTTP 部署(RPC over HTTP)允許RPC 客戶端安全和有效地通過Internet 連線到RPC 伺服器程式並執行遠端過程呼叫。這是在一個名稱為RPC-over-HTTP 代理,或簡稱為RPC 代理的中介軟體的幫助下完成的。

  RPC 代理執行在IIS 計算機上。它接受來自Internet 的RPC 請求,在這些請求上執行認證,檢驗和訪問檢查,如果請求通過所有的測試,RPC 代理將請求轉發給執行真正處理的RPC 伺服器。通過RPC over HTTP,RPC 客戶端不和伺服器直接通訊,它們使用RPC 代理作為中介軟體。

 

RPC 的全稱是 Remote Procedure Call 是一種程序間通訊方式。
它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即無論是呼叫本地介面/服務的還是遠端的介面/服務,本質上編寫的呼叫程式碼基本相同。
比如兩臺伺服器A,B,一個應用部署在A伺服器上,想要呼叫B伺服器上應用提供的函式或者方法,由於不在一個記憶體空間,不能直接呼叫,這時候需要通過就可以應用RPC框架的實現來解決。

 


關於xml-rpc

1.xml rpc是什麼 
1.1. xml rpc簡介 
xml rpc是使用http協議做為傳輸協議的rpc機制,使用xml文字的方式傳輸命令和資料。 
一個rpc系統,必然包括2個部分:1.rpc client,用來向rpc server呼叫方法,並接收方法的返回資料;2.rpc server,用於響應rpc client的請求,執行方法,並回送方法執行結果。 
1.2. xml rpc的可用版本 
xml rpc client和xml rpc server都有很多版本的實現。一般而言,一個實現版本都會同時實現client/server。但由於都滿足xml rpc規範,從理論上講,任何一個版本的rpc client實現與任何一個版本的rpc server都能配套使用。 
更進一步,由於xml rpc以xml文字的方式,使用http協議傳輸,所以與程式語言無關。例如:rpc client的已實現版本包括了:perl,php,python,c/c++,java,等等;rpc server的實現語言包括perl,java,等。 
同一種程式語言所實現的版本也不止一個。例如java版的實現有:Marque的xmlrpc實現(http://xmlrpc.sourceforge.net/),apache的xmlrpc 實現(http://ws.apache.org/xmlrpc/)

1.3.xmlrpc的工作原理 
完整的需要參考xmlrpc規範(http://www.xmlrpc.com/spec) 
簡單描述: 
rpcclient的工作原理:rpcclient根據URL找到rpcserver -> 構造命令包,呼叫rpcserver上的某個服務的某個方法 -> 接收到rpcserver的返回,解析響應包,拿出呼叫的返回結果。 
rpcserver的工作原理:啟動一個webserver(在使用內建的webserver的情況下) -> 註冊每個能提供的服務,每個服務對應一個Handler類 ->進入服務監聽狀態。