Dans les scénarios où plusieurs services gRPC résident sur le même serveur écoutant sur une adresse partagée, comme dans l'exemple fourni, il peut sembler redondant d’établir des connexions distinctes à chaque service. Cet article vise à expliquer pourquoi des connexions distinctes sont généralement requises et explore comment utiliser une seule connexion pour accéder à plusieurs services gRPC.
Pour accéder efficacement à divers services gRPC hébergés sur le même serveur, vous pouvez exploiter une seule connexion client gRPC. Cette approche consiste à initialiser un objet grpc.ClientConn et à le transmettre aux usines clientes de services individuelles, leur permettant de partager la ou les mêmes connexions sous-jacentes.
func main() { cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c1 := pb.NewSubscriberServiceClient(cc) c2 := pb.NewDropperServiceClient(cc) }
Le code gRPC généré fourni dans le fichier pb.go englobe toutes les fonctionnalités nécessaires à l'exécution des RPC. Par conséquent, aucune implémentation supplémentaire côté client n'est nécessaire, à moins qu'une logique spécifique ne doive être exécutée automatiquement lors de chaque appel.
Pour les cas où les services ont des noms de méthodes, vous pouvez les fusionner en une seule structure pour plus de commodité.
type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }
En utilisant cette approche, vous pouvez éliminer les établissements de connexion redondants, ce qui entraîne une implémentation côté client plus efficace et optimisée pour votre gRPC. candidatures.
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!