什么是gRPC

2019-11-06  本文已影响0人  SasukeBo

sasuke.cn
gRPC官网文档学习笔记。主要是翻译。

概览

gRPC客户端可以直接调用另一台机器上运行的gRPC服务提供的方法,就如同调用本地方法一样,让构建分布式应用和服务变得更简单。
gRPC的设计理念和众多RPC系统一样,定义服务,提供方法,远程调用时只需要提供方法名,参数和返回值类型。服务端需要实现这些接口,
并启动一个gRPC服务,处理客户端的请求。客户端有一个stub,作为服务端定义的方法存根,供客户端调用。

WX20191106-191452@2x.png

gRPC客户端和服务器可以在很多环境下互相通信。例如上图,可以用C++实现客户端,用Java、Ruby、Go或Python等语言实现客户端。

使用 Protocol Buffers

gRPC默认使用protocol buffers,谷歌开源的一种成熟的序列化数据结构的语法机制。
当然gRPC也支持其他数据格式,例如JSON。

使用protocol buffers首先需要在proto文件中定义一个数据结构,这种结构被称为message,每个message中包含了很多键值对,它们被称作fields

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

然后使用你擅长的语言的protocol buffer编译器--protoc,去生成数据访问类,提供对各field的存储方法,以及序列化整个数据结构为字节流、解析字节流为数据结构的方法。
如果使用的是C++版的protocol buffers编译器,处理上述例子将会生成一个Person类。

再看一个完整的例子:

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

// 请求结构包含了用户的name
message HelloRequest {
  string name = 1;
}

// 返回消息包含了问候语
message HelloReply {
  string message = 1;
}

使用protoc可以根据proto文件生成客户端服务端代码,以及一些用于操作数据的populating, serializingretrieving简单代码。
之后的学习将更细致的分析这些代码。

上一篇 下一篇

猜你喜欢

热点阅读