IPC和RPC
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