深入了解 RPC 交互流程

作者 : 开心源码 本文共976个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共63人阅读

文节我们讲解 RPC 的消息交互流程,目的是搞清楚一个简单的 RPC 方法调使用背后到底发生了怎么复杂曲折的故事,以看透 RPC 的本质。

上图是信息系统交互模型宏观示用意,RPC 的消息交互则会深入究竟层。

RPC 是两个子系统之间进行的直接消息交互,它用操作系统提供的套接字来作为消息的载体,以特定的消息格式来定义消息内容和边界。

RPC 的用户端通过文件形容符的读写 API (read & write) 来访问操作系统内核中的网络板块为当前套接字分配的发送 (send buffer) 和接收 (recv buffer) 缓存。

如上图所示,左边的用户端进程写 RPC 指令消息到内核的发送缓存中,内核将发送缓存中的数据传送到物理硬件 NIC,也就是网络接口芯片 (Network Interface Circuit)。NIC 负责将翻译出来的模拟信号通过网络硬件传递到服务器硬件的 NIC。服务器的 NIC 再将模拟信号转成字节数据存放到内核为套接字分配的接收缓存中,最终服务器进程从接收缓存中读取数据即为源用户端进程传递过来的 RPC 指令消息。

消息从使用户进程流向物理硬件,又从物理硬件流向使用户进程,中间还经过了一系列的路由网关节点。

上图呈现的只是 RPC 一次消息交互的上半场,下半场是一个逆向的过程,从服务器进程向用户端进程返回响应数据。完整的一次 RPC 过程如下图所示:

下面使用 Python 代码来形容上述过程。

Server 端死循环监听本地 8080 端口,等待用户端的连接。

用户端启动时连接本地 8080 端口,紧接着发送词一个字符串 hello,而后等待服务器响应。

服务器接收到用户端连接后立即收取用户端发送过来的字符串,也就是 hello,打印出来。而后立即给对方回复一个字符串 world。

用户端接收到服务器发送过来的 world,马上打印出来。

关闭连接,结束。

假如从上面代码上观察,我们其实很难看出上图所示的复杂过程。浮现在多数人脑海中往往是下面的这幅简约模型图。相比之下它要简单很多,这也正是操作系统设计的魅力所在,让你时时刻刻都在用它却感受不到它的存在。

小结

通过本节内容,读者们对 RPC 的交互流程应该有了大致理解,但是还并不知道 RPC 之间究竟交互了什么。就好比你能看到远方有几个人在说话,但是不知道他们在说啥。

下一节我们将放大细节,仔细观察 RPC 用户端服务器之间窃窃私语了什么,它们到底是在使用什么外星语言交流。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 深入了解 RPC 交互流程

发表回复