與部署在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中文網其他相關文章!