跳转至

RPC

GRPC

gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

gRPC是一整套RPC方案,它包括:

  • Protobuf(Protocol Buffers)作为接口定义语言(IDL)和消息交换格式,关于Protobuf在序列化 文章中有介绍。Protobuf 提供了很多语言的支持。
  • 基于HTTP/2 通信协议,允许在单个TCP连接上同时发送多个请求和响应,二进制分帧和头部压缩大大提高了数据传输的效率,允许服务器推送(但不等于全双工)

当然,也可以不使用Protobuf而使用其他的序列化方案,使用其他的通信协议。但是默认情况都是如此,默认情况也足够好,下面也不会涉及其他方法。

Usage

在开始之前,需要确保 gRPC 和 Protocol Buffers 工具链已经安装。以 Go 语言为例,可以这样安装:

go install google.golang.org/grpc@latest
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

接着关键部分是定义服务消息格式,使用proto3。在下面的例子中,定义了Greeter服务,提供SayHello远程调用。

syntax = "proto3";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloResponse {
  string message = 1;
}

使用 protoc 命令行工具生成客户端和服务器端代码:

protoc --go_out=. --go-grpc_out=. helloworld.proto

在服务端,你需要实现在 .proto 文件中定义的服务接口,然后开始listen TCP请求。客户端将建立与服务器的连接,然后调用服务端的方法。参考grpc helloworld