grpc
最后更新于:2022-04-02 02:57:25
[TOC]
> [官网](https://grpc.io/)
## 概述
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 时,会为一定的授权流程提供额外的获取访问令牌的支持,这将通过以下代码例子进行展示。
';