Docker にデプロイされた Dgraph サーバーへの gRPC 接続を確立し、ドキュメントに従っていると、次のような問題が発生する可能性があります。次のエラー:
rpc error: code = Unavailable desc = connection closed before server preface received
この散発的なエラーにより、通信が中断される可能性があります。 Dgraph サービス。
このエラーの一般的な原因の 1 つは、サーバーの 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 を使用します。 function:
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 中国語 Web サイトの他の関連記事を参照してください。