Dengan pembangunan berterusan aplikasi moden, permintaan untuk prestasi tinggi dan skalabiliti juga semakin tinggi dan lebih tinggi Oleh itu, terdapat seni bina yang diedarkan berdasarkan protokol RPC untuk memenuhi keperluan ini. GRPC ialah rangka kerja sumber terbuka berdasarkan StuB dalaman Google. GRPC menyediakan mekanisme yang sangat berskala untuk komunikasi merentas bahasa pengaturcaraan, yang direka untuk mengurus komunikasi piawai antara aplikasi dengan cekap.
Artikel ini akan memperkenalkan cara menggunakan GRPC dalam Go Kami akan merangkumi konsep GRPC, langkah-langkah untuk berkomunikasi menggunakan GRPC dan contoh pelaksanaan perkhidmatan GRPC yang mudah dalam Go.
Konsep GRPC
GRPC ialah rangka kerja RPC berdasarkan HTTP/2, menggunakan protobuf sebagai kaedah siri data lalai. Ini bermakna ia boleh dengan mudah membolehkan komunikasi antara bahasa yang berbeza (memanfaatkan kod yang dijana dan perisian tengah yang disediakan oleh grpc).
Keterluasan: GRPC boleh melaksanakan pengesahan dan logik kebenaran yang ringkas dan kompleks pada aliran kod dan lapisan sambungan, serta boleh bekerjasama dengan platform pengkomputeran moden seperti Kubernetes.
Berkomunikasi menggunakan GRPC
Dalam bahagian ini, kami akan memperkenalkan langkah terperinci untuk berkomunikasi menggunakan GRPC. Dalam artikel ini, kami akan melaksanakan perkhidmatan GRPC mudah menggunakan bahasa Go.
Langkah 1: Tentukan fail protobuf
Mula-mula, kami perlu mentakrifkan fail protobuf kami untuk mengisytiharkan antara muka kami. Dalam contoh ini, kami mentakrifkan perkhidmatan mudah yang menambah dua nombor. Berikut ialah kandungan fail .proto kami:
syntax = "proto3"; option go_package = ".;main"; package calculator; message AddRequest { int32 x = 1; int32 y = 2; } message AddResponse { int32 result = 1; } service Calculator { rpc Add(AddRequest) returns (AddResponse); }
Dalam fail protobuf ini, kami mentakrifkan dua mesej, AddRequest dan AddResponse dan Kalkulator antara muka perkhidmatan, yang menyediakan kaedah Tambah yang menerima Ambil dua nombor sebagai argumen dan mengembalikan jumlah mereka.
Langkah 2: Jana kod GO
Seterusnya, kita perlu menggunakan alat protok untuk menjana kod GO. Kami boleh menjana kod dengan cara berikut:
protoc --go_out=plugins=grpc:. *.proto
Perintah ini akan menjana fail calculator.pb.go, yang mengandungi kod GO untuk perkhidmatan dan mesej yang kami tentukan.
Langkah 3: Laksanakan bahagian pelayan
Di bahagian pelayan, kami perlu melaksanakan perkhidmatan untuk antara muka yang kami tetapkan. Dalam kes kami, perkhidmatan kami hanyalah perkhidmatan penambahan mudah yang menambah dua nombor dan mengembalikan jumlahnya. Berikut ialah kod pelayan kami:
package main import ( "context" "net" "google.golang.org/grpc" pb "github.com/calculator" ) type server struct{} func (s *server) Add(ctx context.Context, req *pb.AddRequest) (*pb.AddResponse, error) { result := req.X + req.Y return &pb.AddResponse{Result:result}, nil } func main() { l, err := net.Listen("tcp", ":8080") if err != nil { panic(err) } s := grpc.NewServer() pb.RegisterCalculatorServer(s, &server{}) err = s.Serve(l) if err != nil { panic(err) } }
Kami mula-mula mentakrifkan struktur bernama "pelayan" dan menambah kaedah Tambah padanya. Kaedah ini akan menerima dua nombor x dan y, mengira jumlahnya, dan mengembalikan AddResponse sebagai objek tindak balas.
Kami juga mentakrifkan fungsi utama di mana kami mencipta perkhidmatan grpc baharu dan mengikatnya pada alamat setempat port 8080. Kami juga menyuntik perkhidmatan yang kami tentukan ke dalam pelayan grpc dan memulakan pelayan grpc.
Langkah 4: Laksanakan klien
Akhir sekali, kami perlu menulis kod klien yang boleh menghantar permintaan ke pelayan kami dan menerima respons. Sila ambil perhatian bahawa fail .proto dalam kod sisi klien dan pelayan mesti sepadan. Di bawah ialah kod pelanggan kami:
package main import ( "context" "fmt" "google.golang.org/grpc" pb "github.com/calculator" ) func main() { conn, err := grpc.Dial(":8080", grpc.WithInsecure()) if err != nil { panic(err) } client := pb.NewCalculatorClient(conn) req := pb.AddRequest{X:2, Y:3} resp, err := client.Add(context.Background(), &req) if err != nil { panic(err) } fmt.Printf("Result: %d", resp.Result) }
Dalam kod pelanggan ini, kami mula-mula membuat sambungan ke pelayan GRPC dan kemudian menggunakan sambungan ini untuk mencipta pelanggan baharu. Seterusnya, kami membuat AddRequest, menetapkan nilainya kepada 2 dan 3, dan menghantar permintaan ke pelayan. Akhirnya, kami menerima dan mencetak respons pelayan.
Cara menjalankan kod sampel
Untuk menjalankan kod sampel kami, kami perlu menyediakan persekitaran pembangunan Go terlebih dahulu dan memasang kebergantungan yang berkaitan. Katakan pakej kod kami dinamakan utama. Untuk menjalankan kod contoh kami secara tempatan, anda perlu terlebih dahulu melaksanakan arahan berikut:
go get -u google.golang.org/grpc go get -u github.com/golang/protobuf/protoc-gen-go
Seterusnya jalankan arahan protoc untuk menjana kod go:
protoc --go_out=plugins=grpc:. *.proto
Kemudian susun kod perkhidmatan dan klien kami, dan susun mereka masing-masing Mulakan mereka:
go build server.go go build client.go ./server ./client
Jika semuanya berjalan lancar, pelanggan akan menghantar permintaan tambahan kepada pelayan GRPC dan memaparkan hasilnya sebagai 5.
Kesimpulan
Artikel ini memperkenalkan cara menggunakan GRPC dalam bahasa Go. Kami mula-mula membincangkan konsep GRPC, dan kemudian menunjukkan cara menggunakan protobuf untuk menentukan spesifikasi antara muka, cara menjana kod GO dan cara melaksanakan perkhidmatan GRPC yang mudah. Dengan menggunakan langkah ini, anda boleh mula menggunakan GRPC dalam Go untuk melaksanakan sistem teragih berprestasi tinggi dan berskala.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan GRPC dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!