Rumah >pembangunan bahagian belakang >Golang >Mengapa Sambungan gRPC Saya Gagal dengan 'Sambungan Ditutup Sebelum Prakata Pelayan Diterima'?

Mengapa Sambungan gRPC Saya Gagal dengan 'Sambungan Ditutup Sebelum Prakata Pelayan Diterima'?

Linda Hamilton
Linda Hamiltonasal
2024-12-10 11:12:14196semak imbas

Why Does My gRPC Connection Fail with

Menyelesaikan masalah Ralat gRPC: "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.

Punca Punca

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.

Penyelesaian

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
}

Pertimbangan Tambahan

Selain salah konfigurasi TLS, ralat ini kadangkala boleh timbul disebabkan isu rangkaian sementara.

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn