Rumah >pembangunan bahagian belakang >Golang >Mengapa Sambungan gRPC Saya Gagal dengan 'Sambungan Ditutup Sebelum Prakata Pelayan Diterima'?
Apabila membuat sambungan gRPC ke pelayan Dgraph yang digunakan dalam Docker dan mengikut dokumentasi, anda mungkin menghadapi ralat berikut:
rpc error: code = Unavailable desc = connection closed before server preface received
Ralat sporadis ini boleh mengganggu komunikasi dengan perkhidmatan Dgraph.
Satu punca biasa ralat ini ialah ketidakpadanan antara konfigurasi TLS pelayan dan kekurangan konfigurasi TLS pelanggan. Apabila pelayan berjalan dengan TLS didayakan, pelanggan juga mesti menyambung menggunakan TLS.
Untuk menyelesaikan isu ini, pastikan anda telah mengkonfigurasi pilihan TLS dengan betul pada bahagian klien:
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) }
Apabila membuat sambungan gRPC, gunakan DialWithTLS fungsi:
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 }
Selain salah konfigurasi TLS, ralat ini kadangkala boleh timbul disebabkan isu rangkaian sementara.
Alamat pembaikan ini isu penamatan sambungan sebelum prakata pelayan diterima. Dengan mengkonfigurasi tetapan TLS dengan betul pada bahagian klien, anda boleh mewujudkan sambungan gRPC yang stabil dan selamat ke pelayan Dgraph.
Atas ialah kandungan terperinci Mengapa Sambungan gRPC Saya Gagal dengan 'Sambungan Ditutup Sebelum Prakata Pelayan Diterima'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!