Rumah > Artikel > pembangunan bahagian belakang > Cara menggunakan gRPC untuk melaksanakan pelayan dan klien asas di Golang
gRPC ialah rangka kerja panggilan prosedur jauh berprestasi tinggi, sumber terbuka dan universal yang sesuai untuk panggilan RPC merentas bahasa dan platform. Ia menggunakan protokol protobuf yang dibangunkan oleh Google untuk penghantaran data, boleh merealisasikan komunikasi antara pelayan dan pelanggan dengan cepat, serta menyediakan fungsi dan kebolehskalaan yang kaya. Artikel ini akan memperkenalkan cara menggunakan gRPC untuk melaksanakan pelayan dan pelanggan asas di Golang.
1. Pasang gRPC
Sebelum kita mula, kita perlu memasang gRPC dan protobuf dahulu Anda boleh menggunakan arahan berikut:
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/protoc-gen-go
2
Seterusnya kita perlu mencipta fail .proto, yang mentakrifkan data yang akan kami pindahkan dan kaedah yang akan kami panggil. Dalam contoh ini, kami mencipta fail yang dipanggil greet.proto.
syntax = "proto3"; package greet; service GreetService { rpc SayHello (HelloRequest) returns (HelloResponse) {} } message HelloRequest { string name = 1; } message HelloResponse { string message = 1; }
3. Jana kod
Jana kod berkaitan gRPC melalui fail protobuf. Jalankan arahan berikut:
$ protoc -I greet/ greet/greet.proto --go_out=plugins=grpc:greet
Kod yang dijana akan disimpan dalam direktori salam.
4. Laksanakan pelayan
Dalam pelaksanaan pelayan, kita perlu melaksanakan antara muka perkhidmatan yang ditakrifkan dalam fail proto. Kami boleh melengkapkan pelaksanaan kod sebelah pelayan melalui langkah berikut:
Berikut ialah pelaksanaan kod:
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) } }
5 Melaksanakan klien
Pelaksanaan klien agak mudah. Kami hanya perlu menyambung ke pelayan yang sepadan dan membuat instantiate pelanggan, dan kemudian kami boleh memanggil kaedah yang disediakan oleh pelayan. Dalam pelaksanaan kod klien, anda perlu membuat sambungan untuk komunikasi gRPC dahulu, kemudian menggunakan sambungan untuk mencipta klien dan memanggil kaedah antara muka.
Berikut ialah pelaksanaan kod klien:
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) }
6 Pengujian
Kami telah melaksanakan kod pelayan dan klien, kini jalankan pelayan dan kemudian mulakan. klien untuk diuji.
$ go run greet_server.go
Selepas menjalankan pelayan, buka terminal dan jalankan klien untuk menguji:
$ go run greet_client.go Greeting: Hello world
7 Ringkasan
Artikel ini memperkenalkan cara menggunakan gRPC dalam Laksanakan pelayan dan klien asas di Golang. gRPC menyediakan keupayaan pengekodan dan penyahkodan yang berkuasa sambil menyokong berbilang format pengangkutan, termasuk JSON dan data penimbal protokol, menjadikannya sesuai untuk pelbagai jenis aplikasi. Contohnya, sistem teragih, aplikasi web dan permainan berskala besar, dsb. Jika anda ingin mengetahui lebih lanjut tentang gRPC, lihat dokumentasi rasmi.
Atas ialah kandungan terperinci Cara menggunakan gRPC untuk melaksanakan pelayan dan klien asas di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!