gRPC 应用实战:一步步构建简单问候服务 - 示例教程
"以下是一个使用 gRPC 的示例应用程序:\n\n1. 定义一个 Protocol Buffers 文件(.proto),用于描述服务和消息的结构。\n例如,创建一个名为 demo.proto 的文件,其中包含以下内容:\n\n\nsyntax = \"proto3\";\n\npackage demo;\n\nservice DemoService {\n rpc SayHello (HelloRequest) returns (HelloResponse) {}\n}\n\nmessage HelloRequest {\n string name = 1;\n}\n\nmessage HelloResponse {\n string message = 1;\n}\n\n\n2. 使用 Protocol Buffers 编译器(protoc)生成用于 gRPC 的代码。\n在命令行中执行以下命令:\n\n\nprotoc --proto_path=. --go_out=. --go-grpc_out=. demo.proto\n\n\n这将生成 demo.pb.go 和 demo_grpc.pb.go 两个文件,用于在 Go 中实现 gRPC 服务和客户端。\n\n3. 实现 gRPC 服务端。\n创建一个名为 server.go 的文件,其中包含以下内容:\n\ngo\npackage main\n\nimport (\n\t"context"\n\t"log"\n\t"net"\n\n\t"google.golang.org/grpc"\n\n\tpb \"path/to/demo"\n)\n\ntype server struct{}\n\nfunc (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloResponse, error) {\n\tname := req.GetName()\n\tmessage := \"Hello, \" + name\n\treturn &pb.HelloResponse{Message: message}, nil\n}\n\nfunc main() {\n\tlis, err := net.Listen(\"tcp\", \":50051\")\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to listen: %v\", err)\n\t}\n\n\ts := grpc.NewServer()\n\tpb.RegisterDemoServiceServer(s, &server{})\n\n\tlog.Println(\"Server started on port 50051\")\n\tif err := s.Serve(lis); err != nil {\n\t\tlog.Fatalf(\"Failed to serve: %v\", err)\n\t}\n}\n\n\n4. 实现 gRPC 客户端。\n创建一个名为 client.go 的文件,其中包含以下内容:\n\ngo\npackage main\n\nimport (\n\t"context"\n\t"log"\n\n\t"google.golang.org/grpc"\n\n\tpb \"path/to/demo"\n)\n\nfunc main() {\n\tconn, err := grpc.Dial(\"localhost:50051\", grpc.WithInsecure())\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to connect: %v\", err)\n\t}\n\tdefer conn.Close()\n\n\tc := pb.NewDemoServiceClient(conn)\n\n\treq := &pb.HelloRequest{Name: \"Alice\"}\n\n\tres, err := c.SayHello(context.Background(), req)\n\tif err != nil {\n\t\tlog.Fatalf(\"Failed to call SayHello: %v\", err)\n\t}\n\n\tlog.Printf(\"Response: %s\", res.GetMessage())\n}\n\n\n5. 运行 gRPC 服务端和客户端。\n在命令行中分别执行以下命令:\n\n\ngo run server.go\n\n\ngo run client.go\n\n\n服务端将在端口 50051 上启动,并等待客户端的请求。客户端将向服务端发送一个名为 "Alice" 的问候,并打印出服务端返回的响应。\n\n这只是一个简单的示例,实际的应用中可能会包含更多的服务和消息定义,以及更复杂的逻辑。\n
原文地址: https://www.cveoy.top/t/topic/pZRk 著作权归作者所有。请勿转载和采集!