Maison > développement back-end > Golang > Comment utiliser gRPC pour implémenter un serveur et un client de base dans Golang

Comment utiliser gRPC pour implémenter un serveur et un client de base dans Golang

PHPz
Libérer: 2023-03-31 10:46:34
original
1999 Les gens l'ont consulté

gRPC est un framework d'appel de procédure à distance hautes performances, open source et universel, adapté aux appels RPC dans tous les langages et plates-formes. Il utilise le protocole protobuf développé par Google pour la transmission de données, peut réaliser rapidement une communication entre le serveur et le client et offre des fonctions riches et une évolutivité. Cet article explique comment utiliser gRPC pour implémenter des serveurs et des clients de base dans Golang.

1. Installez gRPC

Avant de commencer, nous devons d'abord installer gRPC et protobuf. Vous pouvez utiliser la commande suivante :

$ go get -u google.golang.org/grpc
$ go get -u github.com/golang/protobuf/protoc-gen-go
Copier après la connexion

2. Créez le fichier protobuf

Ensuite, nous devons créer un fichier .proto, ceci. fichier nous définit Les données à transférer et la méthode à appeler. Dans cet exemple, nous avons créé un fichier appelé greet.proto.

syntax = "proto3";

package greet;

service GreetService {
  rpc SayHello (HelloRequest) returns (HelloResponse) {}
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}
Copier après la connexion

3. Générer du code

Générer du code lié à gRPC via le fichier protobuf. Exécutez la commande suivante :

$ protoc -I greet/ greet/greet.proto --go_out=plugins=grpc:greet
Copier après la connexion

Le code généré sera enregistré dans le répertoire greet.

4. Implémenter le côté serveur

Dans l'implémentation côté serveur, nous devons implémenter l'interface de service définie dans le fichier proto. Nous pouvons terminer l'implémentation du code côté serveur en suivant les étapes suivantes :

  • Créer un serveur gRPC
  • Enregistrer le service
  • Exécuter le serveur

Voici l'implémentation du code :

package main

import (
    "context"
    "log"
    "net"

    "google.golang.org/grpc"
    pb "path/to/greet"
)

type server struct {}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
    return &pb.HelloResponse{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", ":50051")
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterGreetServiceServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}
Copier après la connexion

5. Implémenter le client

La mise en œuvre client est relativement simple. Il suffit de se connecter au serveur correspondant et d'instancier le client, puis de pouvoir appeler les méthodes fournies par le serveur. Dans l'implémentation du code client, vous devez d'abord créer une connexion pour la communication gRPC, puis utiliser la connexion pour créer un client et appeler la méthode d'interface.

Ce qui suit est l'implémentation du code client :

package main

import (
    "log"
    "os"
    "context"
    "google.golang.org/grpc"
    pb "path/to/greet"
)

func main() {
    address := "localhost:50051"
    if len(os.Args) > 1 {
        address = os.Args[1]
    }
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("couldn't connect: %v", err)
    }
    defer conn.Close()

    c := pb.NewGreetServiceClient(conn)

    name := "world"
    if len(os.Args) > 2 {
        name = os.Args[2]
    }
    r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
}
Copier après la connexion

6. Tests

Nous avons implémenté le code serveur et client, exécutons maintenant le serveur, puis démarrons le client pour tester.

$ go run greet_server.go
Copier après la connexion

Après avoir exécuté le serveur, ouvrez un terminal et exécutez le client pour tester :

$ go run greet_client.go
Greeting: Hello world
Copier après la connexion

7. Résumé

Cet article présente comment utiliser gRPC pour implémenter un serveur et un client de base dans Golang. gRPC offre de puissantes capacités d'encodage et de décodage tout en prenant en charge plusieurs formats de transport, notamment JSON et les données de tampon de protocole, ce qui le rend adapté à différents types d'applications. Par exemple, les systèmes distribués, les applications et jeux Web à grande échelle, etc. Si vous souhaitez en savoir plus sur gRPC, consultez la documentation officielle.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal