Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
什么是GRPC
在说GRPC是什么之前先回顾一下RPC,因为GRPC是RPC的一种
RPC,全称Remote Procedure Call,中文译为远程过程调用。通俗地讲,使用RPC进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输,从而能使我们更轻松地创建分布式应用和服务。
而gRPC则是一个高性能、开源、通用的RPC框架。基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议Protocol Buffers基本语法,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。
GRPC是由谷歌开源的,使用gRPC只需要定义好每个API的Request和Response,其余都会交由gRPC处理。
gRPC的通讯流程
如图gRPC通信的第一步是定义IDL(Interface Definition Language),即接口文档(后缀为.proto)
第二步是编译proto文件,得到存根(stub)文件,即上图深绿色部分。
第三步是服务端(gRPC Server)实现第一步定义的接口并启动,这些接口的定义在存根文件里面
最后一步是客户端借助存根文件调用服务端的函数,虽然客户端调用的函数是由服务端实现的,但是调用起来就像是本地函数一样。
gRPC的特点
| 优缺点 | 主题 | 介绍 |
|---|---|---|
| 优点 | 更为严谨、风格统一清晰 | gRPC使用proto文件编写接口proto文件的语法和形式是定死 |
| 优点 | 不用花很多精力去维护文档。 | gRPC文档即代码,接口的更改也会体现到代码中 |
| 优点 | 消息编码。 | gRPC使用protobuf进行消息编码,Restful一般使用JSON进行编码 |
| 优点 | 体积小、传输快。 | gRPC使用protobuf进行消息编码(即序列化),而经protobuf序列化后的消息体积很小(传输内容少,传输相对就快) |
| 优点 | 支持流式传输。 | gRPC传输形式具体可以分为四种(unary、client stream、server stream、bidirectional stream) |
| 缺点 | 浏览器支持程度低。 | 浏览器对gRPC的支持程度相对于Restful并不是很好 |
| 缺点 | 可读性低。 | gRPC序列化的数据是二进制,不知道定义的Request和Response是什么 |