RPC 與 Socket 通訊
RPC(Remote Procedure Call,遠端過程呼叫)是建立在Socket之上的,出於一種類比的願望,在一臺機器上執行的主程式,可以呼叫遠端另一套機器上的子程式,就像LPC(本地過程呼叫).
越底層,程式碼越複雜,靈活性越高,效率越高; 越上層,抽象封裝的越好,程式碼越簡單,效率越差. Socket和RPC的區別再次說明了這點.
那麼, RPC與Socket通訊的區別是什麼呢?
RPC是建立在Socket之上的,RPC帶來了開發C/S程式的簡單可靠的手段,它通過一種叫XDR的資料表達方法描述資料,程式設計師寫虛擬碼,然後由rpcgen程式翻譯為真正的可編譯的C語言原始碼,再翻譯成真正的Client端和Server端程式.
RPC作為普遍的C/S開發方法,開發效率高效,可靠. 但RPC方法的基本原則是--以模組呼叫的簡單性忽略了通訊的具體細節,以便程式設計師不用關心C/S之間的通訊協議, 集中精力對付實現過程. 這就決定了RPC生成的通訊不可能對每種應用都有恰當的處理方法. 與Socket方法相比,傳輸相同的有效資料,RPC佔用更多的網路頻寬.
RPC是在Socket的基礎上實現的, 它比socket需要更多的網路和系統資源. 另外, 在對程式優化時, 程式設計師雖然可以直接修改由rpcgen產生的令人費解的源程式. 但對於追求程式設計高效率的RPC而言, 獲得的簡單性則被大大削弱.
RPC和Socket的 類比
兩個老闆手下各有一個負責接通MSN的祕書. 這兩個祕書就是基於RPC協議建立的會話層通訊. 老闆不需要知道怎麼使用MSN, 只要告訴祕書,祕書就會通過MSN與對方建立會話請求和相應. 而基於Socket的通訊, 老闆需要會使用MSN,這樣,雖然老闆需要實現培訓一下關於MSN的知識, 但與對方通訊時,就不用經過祕書了,效率會更高.