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
Lepaskan: 2024-12-10 11:12:14
asal
199 orang telah melayarinya

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
Salin selepas log masuk

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)
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan