Rumah > pembangunan bahagian belakang > Golang > Bolehkah saya Mengakses Berbilang Perkhidmatan gRPC dengan Sambungan Tunggal?

Bolehkah saya Mengakses Berbilang Perkhidmatan gRPC dengan Sambungan Tunggal?

Susan Sarandon
Lepaskan: 2024-11-03 03:42:31
asal
290 orang telah melayarinya

Can I Access Multiple gRPC Services with a Single Connection?

Akses Pelbagai Perkhidmatan gRPC Serentak

Masalah:

Dalam pelayan dengan berbilang perkhidmatan gRPC tersedia pada satu port, mengapakah perlu mewujudkan sambungan berasingan untuk setiap perkhidmatan apabila mendail daripada pelanggan?

<code class="go">func NewSubscriber() (c SubscriberRPC, err error) {
    c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c.client = pb.NewSubscriberServiceClient(c.conn)
    return
}

func NewDropper() (c DropperRPC, err error) {
    c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c.client = pb.NewDropperServiceClient(c.conn)
    return
}</code>
Salin selepas log masuk

Penyelesaian:

Bertentangan dengan yang asal andaian, berbilang perkhidmatan gRPC pada pelayan yang sama boleh diakses dengan satu sambungan. Ini boleh dicapai dengan mencipta satu grpc.ClientConn dan menghantarnya kepada berbilang pb.New*fungsi Klien.

<code class="go">func main() {
    cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c1 := pb.NewSubscriberServiceClient(cc)
    c2 := pb.NewDropperServiceClient(cc)
}</code>
Salin selepas log masuk

Menggunakan Antara Muka:

Menyesuaikan klien -pengalaman sampingan boleh dilakukan menggunakan kod yang dihasilkan yang disediakan dalam fail pb.go. Walau bagaimanapun, kod yang dijana sudah mengendalikan semua fungsi RPC yang diperlukan.

Untuk kemudahan, berbilang perkhidmatan boleh digabungkan menjadi satu struct:

<code class="go">type SubscriberDropper struct {
    pb.SubscriberServiceClient
    pb.DropperServiceClient
}

func main() {
    // ... as above ...
    sd := &SubscriberDropper{c1, c2}
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bolehkah saya Mengakses Berbilang Perkhidmatan gRPC dengan Sambungan Tunggal?. 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