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

posted @ 2020-06-23 22:14  多弗朗强哥  阅读(1386)  评论(0编辑  收藏  举报