Maison >développement back-end >Golang >Comment puis-je accéder à plusieurs services gRPC à l'aide d'une seule connexion ?

Comment puis-je accéder à plusieurs services gRPC à l'aide d'une seule connexion ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 09:42:31403parcourir

How can I access multiple gRPC services using a single connection?

Accès à plusieurs services gRPC via 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 :

  • Utiliser un seul grpc.ClientConn pour plusieurs services optimise les performances et simplifie le codage.
  • Une interface peut rationaliser les interactions client, réduisant ainsi la duplication de code.
  • L'élimination des dépendances de bibliothèques externes permet des solutions personnalisées et flexibles.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn