grpc和protobuf在一起

目录

gRPC 简介

使用protobuf

protobuf版本


gRPC 简介

gRPC 可以使用protobuf作为它的接口定义语言 ( IDL ) 和它的底层消息交换格式。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使你更容易创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以远程调用的方法及其参数和返回类型。在服务端,服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中仅称为客户端),它提供与服务器相同的方法。

gRPC 客户端和服务器可以在各种环境中运行和相互通信——从 Google 内部的服务器到你自己的桌面——并且可以用任何 gRPC 支持的语言编写。因此,例如,你可以使用 Go、Python 或 Ruby 中的客户端轻松地在 Java 中创建 gRPC 服务器。此外,最新的 Google API 将具有其接口的 gRPC 版本,让你可以轻松地将 Google 功能构建到你的应用程序中。

使用protobuf

默认情况下,gRPC 使用protobuf, 谷歌成熟的结构化数据序列化开源机制(虽然它可以与其他数据格式如 JSON 一起使用)。这是它如何工作的快速介绍。如果你已经熟悉protobuf,请随时跳到下一部分。

使用protobuf的第一步是定义要在proto 文件中序列化的数据的结构:这是一个带有.proto扩展名的普通文本文件。protobuf数据被结构化为 消息,其中每条消息都是一个小的信息逻辑记录,包含一系列称为字段的名称-值对。这是一个简单的例子:

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

然后,一旦你指定了你的数据结构,你就可以使用protobuf编译器protoc从你的原型定义中以你喜欢的语言生成数据访问类。这些为每个字段提供了简单的访问器,例如name()and set_name(),以及将整个结构序列化/解析到原始字节的方法。因此,例如,如果你选择的语言是 C++,则在上面的示例中运行编译器将生成一个名为Person. 然后,你可以在应用程序中使用此类来填充、序列化和检索Personprotobuf消息。

你在普通的 proto 文件中定义 gRPC 服务,将 RPC 方法参数和返回类型指定为protobuf消息:

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

gRPC 使用protoc特殊的 gRPC 插件从你的 proto 文件生成代码:你将获得生成的 gRPC 客户端和服务器代码,以及用于填充、序列化和检索消息类型的常规protobuf代码。你将在下面看到一个示例。

protobuf版本

一般来说,虽然你可以使用 proto2(当前的默认protobuf版本),但我建议你将 proto3 与 gRPC 一起使用,因为它可以让你使用 gRPC 支持的所有语言,并避免与 proto2 客户端对话的兼容性问题proto3 服务器,反之亦然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值