版权所有2015谷歌公司。
详见grpc/INSTALL,了解各种平台的安装说明。
此仓库包含基于共享C核心库的多个语言编写的gRPC库的源代码src/core。
Java源代码位于grpc-java仓库中。Go源代码位于grpc-go仓库中。
你可以在grpc-common仓库中找到更多详细文档和示例。
不同语言的库处于不同的开发状态。我们正在寻求对这些库的所有贡献。
远程过程调用 (RPCs) 为构建分布式应用程序和服务提供了有用的抽象。这个存储库中的库提供了在 HTTP/2 上实现的 gRPC 协议的具体实现。这些库允许客户机使用任何支持的编程语言与服务器进行通信。
使用 gRPC 的开发者通常从 RPC 服务的描述(一组方法集合)开始,然后生成客户端和服务器端接口,在客户端使用这些接口,在服务器端实施。
默认情况下,gRPC 使用 Protocol Buffers 作为描述服务接口和有效负载消息结构的接口定义语言 (IDL)。如果需要,也可以使用其他替代方案。
从 .proto 文件中的接口定义开始,gRPC 提供了生成客户端和服务器端 API 的 Protocol Compiler 插件。gRPC 用户通常在客户端调用这些 API,然后在服务器端实施相应的 API。
同步 RPC 调用,在从服务器收到响应之前会阻塞,这是 RPC 努力实现的程序调用的近似。
另一方面,网络本质上是异步的,在许多场景下,
启动 RPC 而不阻塞当前线程的能力是所希望的。
大多数语言的 gRPC 编程界面都提供了同步和异步版本。
gRPC 支持流处理语义,其中客户端或服务器(或两者)在单个 RPC 调用中发送消息流。最一般的案例是双向流,其中单个 gRPC 调用建立一个客户端和服务器可以互相发送消息的流。流消息按照发送的顺序交付。
gRPC 协议 定义了客户端和服务器之间通信的抽象要求。一个在 HTTP/2 上的具体嵌入通过细化每个操作所需细节的详细说明来完成整个图景。
gRPC RPC 包括由客户端发起的双向消息流。在客户端到服务器的方向上,此流以强制性的 Call Header
开头,然后是可选的 Initial-Metadata
,接着是零个或多个 Payload Messages
。服务器到客户端的方向包括可选的 Initial-Metadata
、零个或多个 Payload Messages
,并以强制性的 Status
和可选的 Status-Metadata
(也就是说,Trailing-Metadata
)结束。
上述定义的摘要协议是在 HTTP/2 上实现的。gRPC 双向流映射为 HTTP/2 流。`Call Header` 和 `Initial Metadata` 的内容以 HTTP/2 标头发送,并受 HPACK 压缩的影响。《Payload Messages》被 序列化为一个长度前缀的 gRPC 帧字节数据流,然后在发送方进行分片,并在接收方重新组装。`Status` 和 `Trailing-Metadata` 以 HTTP/2 后续标头(也称为尾部)的形式发送。
gRPC 继承了 HTTP/2 中的流控制机制并使用它们来实现对流在途消息内存缓冲量的精细控制。