[TOC] ## 概述 RPC - 定义一个服务, 指定其可以被远程调用的方法及其参数和返回类型 gRPC - 认使用 protocol buffers 作为接口定义语言,来描述服务接口和有效载荷消息结构,也可使用其他服务替换 ### gRPC 允许你定义四类服务方法 #### 单项 RPC 即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用 ``` rpc SayHello(HelloRequest) returns (HelloResponse){ } ``` #### 服务端流式 RPC 即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止 ``` rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){ } ``` ### 客户端流式 RPC 客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等待服务端读取这些消息并返回应答 ### 双向流式 RPC 即两边都可以分别通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能按其希望的任意顺序读写 ``` rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){ } ``` ### 使用 API 接口 gRPC 提供 protocol buffer 编译插件,能够从一个服务定义的 .proto 文件生成**客户端**和**服务端**代码。通常 gRPC 用户可以在服务端实现这些API,并从客户端调用它们 ### 同步 vs 异步 rpc 可支持同步和异步调用 ## 支持的授权机制 ### SSL/TLS gRP 集成 SSL/TLS 并对服务端授权所使用的 SSL/TLS 进行了改良,对客户端和服务端交换的所有数据进行了加密。对客户端来讲提供了可选的机制提供凭证来获得共同的授权。 ### OAuth 2.0 gRPC 提供通用的机制(后续进行描述)来对请求和应答附加基于元数据的凭证。当通过 gRPC 访问 Google API 时,会为一定的授权流程提供额外的获取访问令牌的支持,这将通过以下代码例子进行展示。