IPC是進程間通信。
RPC是遠程調用,遠程調用需要借助於進程間通信。
遠程調用的概念相對於本地調用。
本地調用時程序會被裝載到內存中,然后通過內存尋址進行調用。
但是遠程函數不在內存中該怎么調用呢?
這就需要使用進程間通信將調用信息發送到遠端,然后遠端在維護列表中查找目標函數。
**Client端 **
// Student student = Call(ServerAddr, addAge, student)
- 將這個調用映射為Call ID。
- 將Call ID,student(params)序列化,以二進制形式打包
- 把2中得到的數據包發送給ServerAddr,這需要使用網絡傳輸層
- 等待服務器返回結果
- 如果服務器調用成功,那么就將結果反序列化,並賦給student,年齡更新
** Server端**
- 在本地維護一個Call ID到函數指針的映射call_id_map,可以用Map<String, Method> callIdMap
- 等待服務端請求
- 得到一個請求后,將其數據包反序列化,得到Call ID
- 通過在callIdMap中查找,得到相應的函數指針
- 將student(params)反序列化后,在本地調用addAge()函數,得到結果
- 將student結果序列化后通過網絡返回給Client