gRPC是什么?

gRPC 是一个高性能、跨语言的 远程过程调用(RPC) 框架,由 Google 开发。
它基于 HTTP/2 协议,使用 Protocol Buffers(protobuf) 作为接口描述语言和数据格式。

  • 传统 RPC:就像打电话(远程调用函数),你告诉对方要做什么,对方处理后告诉你结果。
  • gRPC:是一种升级版的“打电话”,通话质量(性能)更好,支持多种语言(多平台),还可以同时支持双向交流。

gRPC 的核心特点

  1. 跨语言支持

    • 支持多种编程语言(如 Go、Java、Python、C++ 等)。
    • 客户端和服务端可以用不同语言实现。
  2. 高性能

    • 使用 HTTP/2 提供高效的二进制传输、双向流、连接复用。
  3. 使用 Protocol Buffers

    • 用 Protobuf 定义接口和数据结构,生成多语言代码。
  4. 多种通信模式

    • 一元 RPC:客户端发起请求,服务端返回单一响应。
    • 服务端流式 RPC:客户端发起请求,服务端返回多次响应。
    • 客户端流式 RPC:客户端发送多次请求,服务端返回一次响应。
    • 双向流式 RPC:客户端和服务端可以同时发送多次请求和响应。

Protocol Buffers(Protobuf)是什么?

Protobuf 是 Google 提供的一种轻量级、高效的序列化数据格式。
它是 gRPC 的核心组件,用来定义服务接口和数据结构,同时生成代码(如 Go、Java、Python 等)以便直接使用。


Protobuf 的作用

  1. 定义服务接口和数据结构
    • 描述 gRPC 服务的请求和响应格式。
  2. 生成代码
    • 使用 protoc 工具将 .proto 文件编译成目标语言代码。
  3. 高效序列化和反序列化
    • Protobuf 使用二进制格式,比 JSON 和 XML 更小、更快。

Protobuf 文件示例

syntax = "proto3"; // 指定 Protobuf 的语法版本

package example;  // 包名

// 定义 gRPC 服务
service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// 定义请求消息
message HelloRequest {
  string name = 1;  // "name" 字段,编号为 1
}

// 定义响应消息
message HelloReply {
  string message = 1;  // "message" 字段,编号为 1
}

Protobuf 文件内容解析

  • syntax:指定使用的 Protobuf 版本(推荐使用 proto3)。
  • package:定义文件的命名空间,便于代码生成和组织。
  • service:定义 gRPC 服务,包含一个或多个方法(如 SayHello)。
  • message:定义消息的结构,用于请求和响应。
  • 字段编号:数字(如 1)是字段的唯一编号,便于数据解析。

gRPC 和 Protobuf 的关系

  1. Protobuf 用来定义 gRPC 服务的接口和消息结构。
  2. gRPC 使用 Protobuf 生成的代码,实现高性能远程调用。

gRPC 的工作流程

  1. 编写 .proto 文件
    • 定义服务方法、请求和响应格式。
  2. 生成代码
    • 使用 protoc 工具将 .proto 文件转换为目标语言的代码。
  3. 实现服务逻辑
    • 在服务端实现服务逻辑,客户端调用服务。
  4. 部署服务
    • 服务端启动服务,客户端发送请求并接收响应。

gRPC vs REST

特性 gRPC REST
传输协议 HTTP/2 HTTP/1.1
数据格式 Protobuf(二进制) JSON(文本)
性能 高(序列化速度快,流量小) 较低(基于文本)
类型安全 强(严格的接口定义) 弱(无强制类型检查)
通信模式 一元、流式、多种模式支持 一元请求-响应
多语言支持 非常强
posted @   牛马chen  阅读(191)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示