# RPC 与 gRPC 简介

URL: https://caijiao.org/go/08-advanced/03-rpc-grpc
Source: docs/go/08-advanced/03-rpc-grpc.md
Description: 本节简要介绍 RPC 与 gRPC 的基本概念与差异，说明它们在微服务通信中的角色与使用方式。

## 1. 什么是 RPC

RPC（Remote Procedure Call，远程过程调用）是一种通过网络调用远程服务器函数的机制，就像调用本地函数一样简洁。

特点：

- 屏蔽通信细节
- 通常基于 TCP 或 HTTP
- 使用序列化机制（如 JSON、Protobuf）

## 2. 什么是 gRPC

gRPC 是 Google 开源的高性能 RPC 框架，基于 HTTP/2 和 Protocol Buffers（protobuf）序列化协议。

主要特性：

- 使用 `.proto` 定义服务和消息结构
- 跨语言支持广泛（Go、Java、Python 等）
- 支持流式传输（Client/Server/Bidirectional）
- 内置认证、超时、负载均衡等功能

## 3. gRPC 工作流程简述

1. 定义 `.proto` 文件，声明服务和消息类型
2. 使用 protoc 编译生成 Go 代码
3. 实现服务端逻辑并启动 gRPC 服务器
4. 客户端使用生成的代码进行调用

## 4. RPC 与 gRPC 对比

| 特性       | RPC（通用）       | gRPC                       |
| ---------- | ----------------- | -------------------------- |
| 协议       | 多样（HTTP、TCP） | HTTP/2                     |
| 序列化格式 | JSON、XML 等      | Protobuf（高效、二进制）   |
| 性能       | 一般              | 高性能，支持多路复用       |
| 工具链支持 | 分散              | 完善，官方工具支持生成代码 |
| 双向流     | 支持较少          | 原生支持                   |

---

gRPC 是构建高效微服务的主流选择，适合需要高性能、强类型接口的分布式系统。
