ITADN
grpc/grpc-go
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

gRPC-Go

GoDoc GoReportCard codecov

GogRPC 实现:一个高性能、开源、通用的 RPC 框架,优先支持移动设备和 HTTP/2。更多信息请参阅 [Go gRPC 文档][],或直接查看[快速入门][]。

前提条件

  • Go:最新的两个主要版本 中的任意一个。

安装

只需在代码中添加以下导入,然后 go [build|run|test] 将自动获取所需的依赖项:

import "google.golang.org/grpc"

注意: 如果您正尝试从中国访问 grpc-go,请参阅 下方的常见问题]。

了解更多

常见问题

I/O 超时错误

golang.org 域名在某些国家可能被屏蔽。当发生这种情况时,go get 通常 会产生如下错误:

$ go get -u google.golang.org/grpc
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

要构建 Go 代码,有几种选择:

  • 设置 VPN 并通过它访问 google.golang.org。

  • 使用 Go 模块支持:可以使用 go modreplace 功能为 golang.org 包创建别名。 在你的项目目录中:

    go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest
    go mod tidy
    go mod vendor
    go build -mod=vendor

同样,对于所有托管在 golang.org 上的传递依赖项,也需要执行此操作。有关详细信息,请参阅 golang/go issue #28652

编译错误,undefined: grpc.SupportPackageIsVersion

请使用 go get google.golang.org/grpc 将 gRPC-Go 更新到最新版本。

如何开启日志记录

默认日志记录器由环境变量控制。按以下方式开启所有日志:

$ export GRPC_GO_LOG_VERBOSITY_LEVEL=99
$ export GRPC_GO_LOG_SEVERITY_LEVEL=info

RPC 因错误 "code = Unavailable desc = transport is closing" 而失败

此错误表示 RPC 正在使用的连接已关闭,可能的原因有很多,包括:

  1. 传输凭据配置错误,握手时连接失败
  2. 字节流被破坏,可能是由中间的代理引起的
  3. 服务器关闭
  4. Keepalive 参数导致连接关闭,例如,如果您配置了服务器定期终止连接以 触发 DNS 查找。 如果情况如此,您可能希望增加 MaxConnectionAgeGrace, 以允许更长的 RPC 调用完成。

调试此问题可能很棘手,因为错误发生在客户端,但连接关闭的根本原因在服务器端。在 客户端和服务器 上都开启日志记录,查看是否存在任何传输 错误。