- 代理封装:不想让业务方自己组 HTTP 请求、解析响应 → 让远程调用像本地方法调用
- 序列化:JSON 体积大、解析成本高 → 换成 Protobuf 等二进制序列化,提高传输和解析效率
- 长连接 / 连接复用:RPC 调用频繁,希望减少连接管理和通信开销 → 复用连接传输多个请求
- 协议设计:长连接里连续传很多二进制消息,接收方不知道一条消息从哪开始、是什么请求 → 定义 RPC 消息格式和边界
- 请求路由:服务端收到消息后,需要知道“到底调用哪个服务的哪个方法” → 协议里携带 Service / Method 等信息
- 请求响应关联:同一连接上可能并发多个请求,响应顺序不一定一致 → 通过 Request ID 将响应匹配回原请求
所以真正值得记忆的其实是一条因果链:
像本地调用 → 提高传输效率 → 复用连接 → 解决消息识别 → 找到目标方法 → 匹配请求响应