Maison > développement back-end > Golang > Puis-je accéder à plusieurs services gRPC avec une seule connexion ?

Puis-je accéder à plusieurs services gRPC avec une seule connexion ?

Susan Sarandon
Libérer: 2024-11-03 03:42:31
original
295 Les gens l'ont consulté

Can I Access Multiple gRPC Services with a Single Connection?

Accéder simultanément à plusieurs services gRPC

Problème :

Dans un serveur avec plusieurs services gRPC disponible sur un seul port, pourquoi est-il nécessaire d'établir des connexions distinctes pour chaque service lors de la numérotation depuis le client ?

<code class="go">func NewSubscriber() (c SubscriberRPC, err error) {
    c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c.client = pb.NewSubscriberServiceClient(c.conn)
    return
}

func NewDropper() (c DropperRPC, err error) {
    c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c.client = pb.NewDropperServiceClient(c.conn)
    return
}</code>
Copier après la connexion

Résolution :

Contrairement à l'initiale En supposant que plusieurs services gRPC sur le même serveur soient accessibles avec une seule connexion. Ceci peut être réalisé en créant un grpc.ClientConn et en le transmettant à plusieurs fonctions pb.New*Client.

<code class="go">func main() {
    cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure())
    if err != nil {
        log.Fatal(err)
    }
    c1 := pb.NewSubscriberServiceClient(cc)
    c2 := pb.NewDropperServiceClient(cc)
}</code>
Copier après la connexion

Utilisation d'une interface :

Personnalisation du client -l'expérience côté est possible en utilisant le code généré fourni dans le fichier pb.go. Cependant, le code généré gère déjà toutes les fonctionnalités RPC nécessaires.

Pour plus de commodité, plusieurs services peuvent être combinés en une seule structure :

<code class="go">type SubscriberDropper struct {
    pb.SubscriberServiceClient
    pb.DropperServiceClient
}

func main() {
    // ... as above ...
    sd := &SubscriberDropper{c1, c2}
}</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal