与部署在 Docker 中的 Dgraph 服务器建立 gRPC 连接并按照文档进行操作时,您可能会遇到以下错误:
rpc error: code = Unavailable desc = connection closed before server preface received
此偶发错误可能会中断您与 Dgraph 的通信service.
此错误的一个常见原因是服务器的 TLS 配置与客户端缺少 TLS 配置之间不匹配。当服务器在启用 TLS 的情况下运行时,客户端也必须使用 TLS 进行连接。
要解决此问题,请确保您已在客户端正确配置 TLS 选项:
import ( "crypto/tls" "crypto/x509" "google.golang.org/grpc/credentials" ) // Certificates and CAs used for TLS. var ( myCertificate = ... myCAPool = ... ) // DialWithTLS establishes a TLS-enabled gRPC connection. func DialWithTLS(ctx context.Context, host string) (*grpc.ClientConn, error) { tlsConfig := &tls.Config{ Certificates: []tls.Certificate{myCertificate}, RootCAs: myCAPool, } tlsOpt := grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)) return grpc.DialContext(ctx, host, tlsOpt) }
建立 gRPC 连接时,使用 DialWithTLS函数:
import ( "context" "google.golang.org/grpc" ) // NewClientWithTLS establishes a new gRPC client with TLS enabled. func NewClientWithTLS(host string) (*dgo.Dgraph, error) { conn, err := DialWithTLS(context.Background(), host) if err != nil { return nil, err } return dgo.NewDgraphClient(api.NewDgraphClient(conn)), nil }
除了 TLS 配置错误之外,由于短暂的网络问题偶尔也会出现此错误。
此修复地址在收到服务器前言之前连接终止的问题。通过在客户端正确配置 TLS 设置,您可以与 Dgraph 服务器建立稳定且安全的 gRPC 连接。
以上是为什么我的 gRPC 连接失败并显示'连接在收到服务器前言之前已关闭”?的详细内容。更多信息请关注PHP中文网其他相关文章!