Adakah GRPC hanya menyokong bahasa Go? Penerokaan dan Analisis
GRPC (Panggilan Prosedur Jauh gRPC) ialah rangka kerja panggilan prosedur jauh merentas bahasa berprestasi tinggi, yang pada asalnya dibangunkan oleh Google dan digunakan secara meluas dalam komuniti sumber terbuka. Disebabkan kaedah penyiaran yang cekap dan prestasi penghantaran berdasarkan protokol HTTP/2, GRPC digunakan secara meluas dalam seni bina perkhidmatan mikro. Walau bagaimanapun, sesetengah orang salah faham bahawa GRPC hanya menyokong bahasa Go Di sini kita akan meneroka isu ini secara mendalam dan memberikan contoh kod tertentu.
Pertama sekali, perlu jelas bahawa GRPC tidak mengehadkan bahasa pengaturcaraan yang digunakan oleh pembangun Ia menyokong pelbagai bahasa pengaturcaraan, termasuk tetapi tidak terhad kepada Go, Java, Python, C++, dll. Dengan perkembangan pesat GRPC, komuniti juga terus berkembang, menyediakan sokongan untuk lebih banyak bahasa pengaturcaraan.
Apabila menggunakan GRPC, anda perlu menentukan fail .proto, yang mengandungi definisi antara muka dan format mesej perkhidmatan. Di bawah ini kami mengambil bahasa Go dan bahasa Python sebagai contoh untuk menunjukkan cara mentakrifkan perkhidmatan GRPC yang mudah.
Pertama ialah contoh bahasa Go:
syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
Kemudian, jana kod bahasa Go melalui alat protok:
protoc --go_out=plugins=grpc:. helloworld.proto
Seterusnya, tulis pelayan GRPC dan kod klien:
package main import ( "context" "log" "net" "google.golang.org/grpc" pb "path/to/proto" ) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{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.RegisterGreeterServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
Kemudian ialah contoh bahasa Python:
syntax = "proto3"; package helloworld; service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. helloworld.proto
from concurrent import futures import grpc import helloworld_pb2_grpc as pb2_grpc import helloworld_pb2 as pb2 class Greeter(pb2_grpc.GreeterServicer): def SayHello(self, request, context): return pb2.HelloReply(message='Hello, %s' % request.name) def serve(): server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) pb2_grpc.add_GreeterServicer_to_server(Greeter(), server) server.add_insecure_port('[::]:50051') server.start() server.wait_for_termination() if __name__ == '__main__': serve()
Atas ialah kandungan terperinci Adakah GRPC hanya menyokong bahasa Go? Meneroka dan menganalisis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!