Dalam beberapa tahun kebelakangan ini, bahasa golang telah digemari oleh semakin ramai pembangun, dan ciri ringan serta tinggi konkurensinya digunakan secara meluas dalam perkhidmatan bahagian belakang beberapa perusahaan besar. Dengan populariti perkhidmatan mikro dan teknologi asli awan, golang semakin digunakan dalam medan pelayan, dan rangka kerja rpc golang grpc juga telah digunakan secara meluas.
Artikel ini terutamanya memperkenalkan penggunaan grpc Sebelum penggunaan, anda perlu memahami konsep asas golang dan grpc.
1. Konsep asas golang
Golang ialah bahasa pengaturcaraan yang ditaip secara statik, disusun dan serentak, yang dilahirkan daripada Google. Terdapat beberapa konsep khusus dalam bahasa golang yang perlu difahami.
2. Konsep asas grpc
grpc ialah rangka kerja RPC sumber terbuka dan berprestasi tinggi, dibangunkan dan sumber terbuka oleh Google. grpc menyokong berbilang bahasa, termasuk golang, C++, Java, dll. Ciri-ciri grpc ialah:
3. Penggunaan grpc
Selepas mempunyai konsep asas, mari perkenalkan penggunaan grpc.
Andaikan kita ingin menulis program pelayan grpc yang mudah, kodnya adalah seperti berikut:
package main import ( "context" "fmt" "log" "net" "google.golang.org/grpc" pb "path/to/your/proto" ) const ( port = ":50051" ) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { log.Printf("Received: %v", in.Name) return &pb.HelloReply{Message: "Hello " + in.Name}, nil } func main() { lis, err := net.Listen("tcp", port) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
Katakan kita ingin menulis program klien grpc yang mudah, kodnya adalah seperti berikut:
package main import ( "context" "log" "os" "time" "google.golang.org/grpc" pb "path/to/your/proto" ) const ( address = "localhost:50051" defaultName = "world" ) func main() { conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock()) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close() c := pb.NewGreeterClient(conn) name := defaultName if len(os.Args) > 1 { name = os.Args[1] } ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() r, err := c.SayHello(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.Message) }
Arahan kompilasi adalah seperti berikut:
$ go build -o greeter_server ./server/main.go $ go build -o greeter_client ./client/main.go
$ ./greeter_server
Selepas berjalan, anda akan melihat output berikut:
2021/05/07 10:37:30 Listening on :50051
$ ./greeter_client
Selepas dijalankan, anda akan melihat output berikut:
2021/05/07 10:38:28 Greeting: Hello world
Antaranya, dunia ialah parameter lalai, atau anda boleh Lulus dalam parameter lain, seperti:
$ ./greeter_client Tim
Selepas berjalan, anda akan melihat output berikut:
2021/05/07 10:39:22 Greeting: Hello Tim
4. Ringkasan
Artikel ini terutamanya memperkenalkan penggunaan grpc Ini termasuk menulis program pelayan grpc, menulis program klien grpc, menyusun dan menjana fail binari, dan menjalankan pelayan grpc dan program klien. Jika anda ingin mengetahui lebih lanjut tentang golang dan grpc, anda boleh merujuk kepada dokumen rasmi dan bahan lain yang berkaitan.
Atas ialah kandungan terperinci How to deploy golang grpc. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!