IPC和RPC


IPC是進程間通信。

RPC是遠程調用,遠程調用需要借助於進程間通信。

遠程調用的概念相對於本地調用。

本地調用時程序會被裝載到內存中,然后通過內存尋址進行調用。

但是遠程函數不在內存中該怎么調用呢?

這就需要使用進程間通信將調用信息發送到遠端,然后遠端在維護列表中查找目標函數。

**Client端 **
// Student student = Call(ServerAddr, addAge, student)

  1. 將這個調用映射為Call ID。
  2. 將Call ID,student(params)序列化,以二進制形式打包
  3. 把2中得到的數據包發送給ServerAddr,這需要使用網絡傳輸層
  4. 等待服務器返回結果
  5. 如果服務器調用成功,那么就將結果反序列化,並賦給student,年齡更新

** Server端**

  1. 在本地維護一個Call ID到函數指針的映射call_id_map,可以用Map<String, Method> callIdMap
  2. 等待服務端請求
  3. 得到一個請求后,將其數據包反序列化,得到Call ID
  4. 通過在callIdMap中查找,得到相應的函數指針
  5. 將student(params)反序列化后,在本地調用addAge()函數,得到結果
  6. 將student結果序列化后通過網絡返回給Client

參考鏈接:https://www.jianshu.com/p/7d6853140e13


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM