简介

一款语言中立、平台中立、开源的远程过程调用 (RPC) 系统

  • 提供高效的进程间通信。
    • gRPC 没有使用 XML 或者 JSON 这种文本格式,而是采用了基于 protocol buffers的二进制协议;
    • 同时,gRPC 采用了 HTTP/2 做为通信协议,从而能够快速的处理进程间通信。
  • 简单且良好的服务接口和模式。gRPC 为程序开发提供了一种契约优先的方式,必须首先定义服务接口,才能处理实现细节。
  • 支持多语言。gRPC 是语言中立的,我们可以选择任意一种编程语言,都能够与 gRPC 客户端或者服务端进行交互。
  • 成熟并且已被广泛使用。通过在 Google 的大量实战测试,gRPC 已经发展成熟。

与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其可以被远程调用的方法及其参数和返回类型
在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。
image.png

Protocol Buffers
Protocol Buffers是一种与语言无关,平台无关的可扩展机制、结构数据序列化机制, 用于序列化结构化数据。使用Protocol Buffers可以一次定义结构化的数据,然后可以使用特殊生成的源代码轻松地在各种数据流中使用各种语言编写和读取结构化数据。

image.png

服务类型 特点
简单 RPC 一般的rpc调用,传入一个请求对象,返回一个返回对象
服务端流式 RPC 传入一个请求对象,服务端可以返回多个结果对象
客户端流式 RPC 客户端传入多个请求对象,服务端返回一个结果对象
双向流式 RPC 结合客户端流式RPC和服务端流式RPC,可以传入多个请求对象,返回多个结果对象

服务定义

单项 RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。

  1. rpc SayHello(HelloRequest) returns (HelloResponse){
  2. }

https://doc.oschina.net/grpc?t=58009