Maison > Article > développement back-end > Comment puis-je accéder à plusieurs services gRPC à l'aide d'une seule connexion ?
Introduction :
gRPC permet aux clients de communiquer avec plusieurs services exposés sur un seul serveur. Cependant, on suppose souvent que chaque service nécessite une connexion client dédiée. Cet article explique comment utiliser une seule connexion pour accéder à plusieurs services gRPC.
Composition d'un seul socket :
Malgré les interfaces de service distinctes, il n'est pas nécessaire d'établir un socket individuel. connexions pour chaque service. Au lieu de cela, vous pouvez créer un seul grpc.ClientConn. Cette connexion peut ensuite être transmise à tous les clients de service instanciés à l'aide des fonctions New*Client(). En partageant une connexion, ces clients exploitent les mêmes mécanismes de transport et de multiplexage sous-jacents.
<code class="go">cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) }</code>
Utilisation d'une interface :
Bien que la création de structures distinctes pour chaque service simplifie le client interactions, il favorise la duplication de code. Pour réduire cela, une interface, telle que ServiceClient, peut être définie et implémentée par tous les clients de service. Cela permet le partage de propriétés et de méthodes communes, réduisant ainsi l'encombrement du code.
<code class="go">type ServiceClient interface { // Common methods and properties } type SubscriberClient struct { pb.SubscriberServiceClient } type DropperClient struct { pb.DropperServiceClient }</code>
Élimination des dépendances des bibliothèques :
Bien que les bibliothèques comme cmux offrent des solutions de partage de connexions, il est possible d’y parvenir sans dépendances externes. Le grpc.ClientConn fournit un accès direct au transport sous-jacent, permettant la création de plusieurs clients de service.
<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>
Principaux points à retenir :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!