gRPC 基于 HTTP/2 与 Protocol Buffers 构建,相比 REST 具有更小的传输体积与更强的类型契约。
一、HTTP/2 多路复用优势
HTTP/2 在单一 TCP 连接上通过 Stream ID 复用多个请求,消除了 HTTP/1.1 的队头阻塞问题。gRPC 利用该特性支持四种调用模式:
- Unary RPC:一请求一响应
- Server Streaming:服务端流式推送
- Client Streaming:客户端流式上传
- Bidirectional Streaming:双向流
二、Protobuf 定义示例
protobuf
syntax = "proto3";
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
rpc ListUsers (UserRequest) returns (stream UserResponse);
}
message UserRequest {
int64 id = 1;
}Protobuf 使用 TLV 编码与字段编号,相比 JSON 显著减小报文体积,适合高频内部服务通信。