Go 微服务实战.png

gRPC Bidirectional Streaming RPC 是指客户端和服务端都可以同时发送或接收 Streaming 数据流,而且 Requests 和 Responses 的数量不要求一致,即它们是异步的,也许客户端发送了 3 个请求 messages,而服务端响应了 5 个响应 messages。它非常适合当客户端和服务端需要异步发送很多数据时,或者聊天场景,或者客户端和服务端的长时间连接情形等

Go 微服务实战.png

由于 gRPC 支持 HTTP/2,所以可以使用 HTTP/2 的 Stream 特性,Server-side Streaming RPC 是指客户端发送一个请求 message 后,将会从服务端接收多个响应 messages,服务端返回 Streaming 数据流。它非常适合要传输的结构化数据比较大的场景,或者服务端需要主动 Push 数据的场景,比如直播、聊天等,服务端可以持续返回响应包,而无需客户端再发送请求

Go 微服务实战.png

gRPC Unary RPC 就是我们所熟悉的客户端发起一次 Request、服务端响应一次 Response,即客户端发送一个请求 message 给服务端,然后再从服务端接收到一个响应 message。Unary RPC 调用将成为你的 API 中最通用的 RPC 调用,它非常适合要传输的结构化数据很小的场景,我们构建 API 时应当首先实现为 Unary RPC,当它的性能出现瓶颈时,才考虑将它改写成 Streaming RPC

Go 微服务实战.png

gRPC 是谷歌开源的高性能、轻量级 RPC 通信框架,基于 Protocol Buffers 序列化协议进行开发,支持多种语言(C++、Golang、Python、Java 等),本篇只介绍 Golang 的 gRPC 使用。同时,由于 gRPC 支持 HTTP/2 协议,使用二进制帧进行数据传输,还可以为通信双方建立持续的双向数据流,使其在 Android、iOS 等客户端后端服务的开发领域具有良好的前景。gRPC 提供了一种简单的方法来定义服务,同时客户端可以充分利用 HTTP/2 stream 的特性,从而有助于节省带宽、降低 TCP 的连接次数、节省CPU的使用等