欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

gRPC 与 Protobuf:HTTP/2 多路复用与流式调用原理

发表于:|最后更新:|分类:后端开发|阅读:7050 次
本文标签:微服务gRPCProtobuf

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 显著减小报文体积,适合高频内部服务通信。