一、初识grpc
grpc(全称:Google Remote Procedure Call)是google开发的rpc框架,默认使用protobuf 定义数据结构。支持跨语言、流式调用,基于HTTP2协议。
二、四种服务方法
一元rpc: (Unary RPC)是最基本的RPC类型,它是一种请求-响应模式(类似http),客户端向服务器发送单个请求并返回单个响应。一元RPC适用于少量数据传输,单次请求/响应的场景。
客户端流式rpc: 客户端发送一系列流式请求命令给服务端,然后调用结束。服务器返回单个响应结果给客户端。适用于客户端会大量持续发送数据给服务端的场景。
服务器流式rpc:客户端发送请求到服务器,然后服务端返回一系列流式响应结果给客户端。适用于服务端会大量持续推送数据给客户端的场景。
服务器流式rpc:客户端发送请求到服务器,然后服务端返回一系列流式响应结果给客户端。适用于服务端会大量持续推送数据给客户端的场景。
三、适用场景以及优缺点
- gRPC适用于分布式系统、微服务架构、云原生应用、移动应用等
- 优点
- 高性能:使用 Protocol Buffers 二进制序列化格式,这和其它使用JSON的REST API或者其它RPC框架比更高效。
- 跨语言:支持多种不同的编程语言,这对于由多种编程语言开发的系统中很有用。
- 拦截器:支持对rpc调用添加额外的处理函数,可用于身份验证,日志记录等场景。
- 缺点
- 复杂性:开发人员需要对grpc和protobuf由一定的了解。
- 数据不可读:因为采用了二进制序列化格式
- 浏览器兼容性:目前还不能从浏览器直接调用gRPC服务。gRPC官方提供了一个Web库,通过代理转换格式连接到grpc服务,但只支持一元rpc和服务器流式rpc。grpc-web
四、Rest Vs Grpc
rest + json 和 grpc + protocol buffers的基准测试,下面引用开源项目的测试结果。
结论:”很明显,随着数据量的增加,gRPC 和 Protobuf 确实优于 REST 和 JSON!”

- 本文作者: 暮秋人
- 本文链接: https://muqiuren.pages.dev/2023/06/grpc-get-start/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!