基于google的官方文档,附带一些自己的思考
服务(service)
gRPC可以定义四种服务
- 简单的
request-response
-
request-stream response
,一般用于下载 -
stream request-response
,一般用于上传 - 双向流连接,
HTTP2.0
的特性之一
使用gRPC
- 服务器端实现服务器端的接口,服务器端处理的是对象
- 客户端用客户端的接口发送请求,客户端传给服务器端的是对象
总而言之,对于写业务代码的人,只需要处理业务对象即可,gRPC保证了对象的序列化问题,IDL用的是pb3.0
(官方建议3.0,理论上用2.0也是可以的)
请求
gRPC支持同步请求和异步请求
gRPC连接细节
- 当一个gRPC连接开始的时候,客户端先上传自己的metadata(相当于request包头),然后服务器可以选择马上返回自己的metadata(相当于reponse包头),或者等待客户端上传完包体再返回
- 客户端可以声明自己的过期时间(deadline),然而此属性是依赖于客户端语言,例如python肯定有过期时间,但是并不是每个语言都有默认的过期时间
- RPC的异步请求可以取消,同步请求不能取消(有点质疑)
- gRPC的默认行为是可以改变的,例如是否压缩数据等