Pengenalan:
gRPC membolehkan pelanggan berkomunikasi dengan pelbagai perkhidmatan yang terdedah pada pelayan tunggal. Walau bagaimanapun, selalunya diandaikan bahawa setiap perkhidmatan memerlukan sambungan pelanggan khusus. Artikel ini meneroka cara menggunakan sambungan tunggal untuk mengakses berbilang perkhidmatan gRPC.
Mendail Soket Tunggal:
Walaupun mempunyai antara muka perkhidmatan yang berasingan, adalah tidak perlu untuk mewujudkan soket individu sambungan untuk setiap perkhidmatan. Sebaliknya, anda boleh mencipta satu grpc.ClientConn. Sambungan ini kemudiannya boleh dihantar kepada semua pelanggan perkhidmatan yang dibuat menggunakan fungsi New*Client(). Dengan berkongsi sambungan, pelanggan ini memanfaatkan mekanisme pengangkutan dan pemultipleksan asas yang sama.
<code class="go">cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) }</code>
Menggunakan Antara Muka:
Walaupun mencipta struktur berasingan untuk setiap perkhidmatan memudahkan pelanggan interaksi, ia menggalakkan pertindihan kod. Untuk mengurangkan ini, antara muka, seperti ServiceClient, boleh ditakrifkan dan dilaksanakan oleh semua pelanggan perkhidmatan. Ini membolehkan perkongsian sifat dan kaedah biasa, mengurangkan kekacauan kod.
<code class="go">type ServiceClient interface { // Common methods and properties } type SubscriberClient struct { pb.SubscriberServiceClient } type DropperClient struct { pb.DropperServiceClient }</code>
Menghapuskan Ketergantungan Perpustakaan:
Walaupun perpustakaan seperti cmux menawarkan penyelesaian untuk perkongsian sambungan, ia mungkin untuk mencapai ini tanpa kebergantungan luar. grpc.ClientConn menyediakan akses terus kepada pengangkutan asas, membolehkan penciptaan berbilang pelanggan perkhidmatan.
<code class="go">func NewServiceClient(conn *grpc.ClientConn, service interface{}) interface{} { switch service { case pb.SubscriberServiceServer: return pb.NewSubscriberServiceClient(conn) case pb.DropperServiceServer: return pb.NewDropperServiceClient(conn) } panic("Unknown service") }</code>
Pengambilan Utama:
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses berbilang perkhidmatan gRPC menggunakan satu sambungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!