gRPC-Go
gRPC 的 Go 实现。一个高性能、开源、通用的 RPC 框架,将移动和 HTTP/2 放在首位。更多信息请参见 Go gRPC 文档,或者直接跳转到 快速入门。
先决条件
安装
如果支持 Go module(Go 1.11+),只需添加以下导入即可:
import "google.golang.org/grpc"
到你的代码中,然后 go [build|run|test] 会自动获取必要的依赖关系。
否则,要安装 grpc-go 包,请运行以下命令。
$ go get -u google.golang.org/grpc
了解更多
常见问题
编译错误,undefined:grpc.SupportPackageIsVersion
如果你使用的是 Go 模块:
确保你的 gRPC-Go 版本在包含生成的 .pb.go 文件的同一个模块中需要适当的版本。例如,SupportPackageIsVersion6 需要 v1.27.0,所以在你的 go.mod 文件中。
module <your module name> require ( google.golang.org/grpc v1.27.0 )
如果你没有使用 Go 模块:
更新 proto 包,gRPC 包,并重建 .proto 文件。
go get -u github.com/golang/protobuf/{proto,protoc-gen-go} go get -u google.golang.org/grpc protoc --go_out=plugins=grpc:. *.proto
如何开启记录功能
默认的记录器由环境变量控制。像这样打开一切:
$ export GRPC_GO_LOG_VERBOSITY_LEVEL=99 $ export GRPC_GO_LOG_SEVERITY_LEVEL=info
RPC 失败,出现错误 "code = Unavailable desc = transport is closing"
- 这个错误意味着 RPC 所使用的连接被关闭,有很多可能的原因,包括:
- 传输凭证配置错误,连接在握手时失败了。
- 字节被中断,可能是被中间的代理所破坏。
- 服务器关机
- Keepalive 参数导致连接关闭,例如,如果你已经配置服务器定期终止连接以 触发 DNS 查找。如果是这种情况,你可能想增加你的 MaxConnectionAgeGrace,以允许更长的 RPC 调用完成。
调试这个问题可能很棘手,因为错误发生在客户端,但连接被关闭的根本原因是在服务器端。在客户端和服务器上同时开启日志记录,看看是否有传输错误。
(The second edition revised by vz on 2020.12.26)