💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[RPC原理详解](https://blog.csdn.net/cbbbc/article/details/50675240) [序列化的作用](https://blog.csdn.net/cbbbc/article/details/55214562) ***** [Go RPC 开发指南](https://doc.rpcx.io/) [用 rpc 实现远程过程调用](https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/15.9.md) ***** RPC 是两个子系统之间进行的直接消息交互,它使用操作系统提供的套接字来作为消息的载体,以特定的消息格式来定义消息内容和边界。 RPC 的客户端通过文件描述符的读写 API (read & write) 来访问操作系统内核中的网络模块为当前套接字分配的发送 (send buffer) 和接收 (recv buffer) 缓存。 >户端进程写 RPC 指令消息到内核的发送缓存中,内核将发送缓存中的数据传送到物理硬件 NIC,也就是网络接口。NIC 负责将翻译出来的模拟信号通过网络硬件传递到服务器硬件的 NIC。服务器的 NIC, 再将模拟信号转成字节数据存放到内核为套接字分配的接收缓存中,最终服务器进程从接收缓存中读取数据即为源客户端进程传递过来的 RPC 指令消息。 >消息从用户进程流向物理硬件,又从物理硬件流向用户进程,中间还经过了一系列的路由网关节点。 **一次 RPC 过程如下图所示:** ![](https://img.kancloud.cn/65/f8/65f86f3e7e2ee8d8e53913533cd37871_811x432.png) ***** **完整的 RPC 框架 ** 在一个典型 RPC 的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件,其中“RPC 协议”就指明了程序如何进行网络传输和序列化。 ![](https://img.kancloud.cn/85/cc/85ccd491a28a66f3a1707ee7345ea3b2_1440x961.png) **RPC 核心功能** RPC 的核心功能是指实现一个 RPC 最重要的功能模块,就是上图中的”RPC 协议”部分: ![](https://img.kancloud.cn/96/58/965870d07dbc0448cb6cda021b0b1b4e_602x179.png) 一个 RPC 的核心功能主要有 5 个部分组成,分别是:客户端、客户端 Stub、网络传输模块、服务端 Stub、服务端等。 ![](https://pic2.zhimg.com/80/v2-e1f83338420d6640a73a677eac81afb5_1440w.jpg) 下面分别介绍核心 RPC 框架的重要组成: * **客户端(Client)** 服务调用方。 * **客户端存根(Client Stub)** :存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。 * **服务端存根(Server Stub)** : 接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。 * **服务端(Server):** 服务的真正提供者。 * **Network Service:** 底层传输,可以是 TCP 或 HTTP。 ***** ## 深入理解 RPC 专题 阿里 **徐靖峰** 的原创文章,该系列文章由浅及深深入分析了 RPC 的核心原理。 * [简单了解RPC实现原理](http://cmsblogs.com/?p=3867) * [深入理解RPC之序列化篇–Kryo](http://cmsblogs.com/?p=3869) * [深入理解RPC之序列化篇](http://cmsblogs.com/?p=3871) * [深入理解RPC之动态代理篇](http://cmsblogs.com/?p=3873) * [深入理解RPC之传输篇](http://cmsblogs.com/?p=3875) * [Motan中使用异步RPC接口](http://cmsblogs.com/?p=3877) * [深入理解RPC之协议篇](http://cmsblogs.com/?p=3879) * [深入理解RPC之服务注册与发现篇](http://cmsblogs.com/?p=3881) * [深入理解RPC之集群篇](http://cmsblogs.com/?p=3883) * [设计RPC接口时,你有考虑过这些吗?](http://cmsblogs.com/?p=3885)