简介

RPC(Remote Procedure Call, 远程过程调用).是一种协议,用来屏蔽分布式计算当中的各种调用细节,使得可以像是本地调用一样直接调用一个远程函数.

gRPC是一个高性能的开源的RPC框架.

通过某种方式描述一个服务,这种描述方式是语言无关的.在这个”服务定义”的过程中,我们描述了我们提供的服务名是什么,有哪些方法可以被调用,这些方法以什么样的方式入参,有什么的回参.

定义好服务之后,gRPC会屏蔽底层的细节,client只需要直接调用定义好的方法,就能拿到预期的结果.server端还需要实现定义的方法.

Protocol Buffss

这是谷歌开源的一套成熟的数据结构序列化机制

这个工具可以把我们定义的方法,转换成特定语言的代码.在发送请求和接收响应时,这个工具还会完成对应的编码和解码工作.

proto文件

message

需要传输的数据格式的定义

字段规则

required:

optional:

repeated:

消息号

每个字段都必须要有一个唯一的标识号[1, 2^29-1]

服务

1
2
3
4
service SearchService {
# rpc 服务函数名 (参数) 返回 (返回参数)
rpc Search(SearchRequest) returns (SearchResponse)
}

服务端编写

  • 创建gRPC Server对象
  • 将server注册到gRPC Server的内部注册中心
  • 创建Listen, 监听TCP端口
  • gRPC Server 开始lis.Accept, 直到Stop

客户端编写

  • 创建与给定目标的连接交互
  • 创建server的客户端对象
  • 发送RPC请求,等待同步响应,得到回调后返回响应结果
  • 输出响应结果