Dalam senario di mana berbilang perkhidmatan gRPC berada pada pelayan yang sama mendengar pada alamat yang dikongsi, seperti dalam contoh yang disediakan, ia mungkin kelihatan berlebihan untuk mewujudkan sambungan berasingan kepada setiap perkhidmatan. Artikel ini bertujuan untuk menangani sebab sambungan berbeza biasanya diperlukan dan meneroka cara menggunakan sambungan tunggal untuk mengakses berbilang perkhidmatan gRPC.
Untuk mengakses pelbagai perkhidmatan gRPC yang dihoskan dengan berkesan pada pelayan yang sama, anda boleh memanfaatkan sambungan klien gRPC tunggal. Pendekatan ini melibatkan pemulaan objek grpc.ClientConn dan menyerahkannya kepada kilang pelanggan perkhidmatan individu, membolehkan mereka berkongsi sambungan asas yang sama.
func main() { cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c1 := pb.NewSubscriberServiceClient(cc) c2 := pb.NewDropperServiceClient(cc) }
Kod gRPC yang dijana yang disediakan dalam fail pb.go merangkumi semua fungsi yang diperlukan untuk melaksanakan RPC. Oleh itu, tidak ada keperluan untuk pelaksanaan sisi klien tambahan, melainkan logik khusus perlu dilaksanakan secara automatik semasa setiap panggilan.
Untuk kes di mana perkhidmatan mempunyai ciri yang berbeza nama kaedah, anda boleh menggabungkannya ke dalam satu struct untuk kemudahan tambahan.
type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }
Dengan menggunakan pendekatan ini, anda boleh menghapuskan penubuhan sambungan yang berlebihan, menghasilkan pelaksanaan sisi klien yang lebih cekap dan dioptimumkan untuk gRPC anda aplikasi.
Atas ialah kandungan terperinci Bolehkah saya Mengakses Berbilang Perkhidmatan gRPC melalui Sambungan Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!