我试图在 gRPC、Protobuf 的上下文中理解监听器、服务器和服务的概念。
让我们使用https://grpc.io/docs/languages/go/basics/上的示例作为参考。在这里我们有
- 听者:李
- gRPC 服务器:grpcServer := grpc.NewServer()
- 服务:RouteGuide服务
看来我们还可以将多个服务注册到同一服务器。
也就是说,除了RouteGuide Service,我们可以说SomeOther Service,SomeOtherOther Service。
我们可以注册所有这三个并期望服务器能够提供属于这三个服务的方法(RouteGuide、SomeOther、SomeOtherOther)。
假设 RouteGuide、SomeOther、SomeOtherOther 都有自己的特定于它们的 proto 文件。并且所有的原型都在同一个命名空间(package
值)中。
grpcServer := grpc.NewServer(opts...)
newRouteGuideService := pb.NewRouteGuideServer()
pb.RegisterRouteGuideServer(grpcServer, newRouteGuideService)
someOtherService := pb.NewSomeOtherServer()
pb.RegisterSomeOtherServer(grpcServer, someOtherService)
someOtherOtherService := pb.NewSomeOtherOtherServer()
pb.RegisterSomeOtherOtherService(grpcServer, someOtherOtherService)
lis, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", 80))
grpcServer.Serve(lis)
可以说,Server 一词在这里显得过重了。不仅是grpcServer,RouteGuide、SomeOther、SomeOtherOther也被称为Servers。
我试图弄清楚如何建模或理解这些概念。
是否可以说,服务器gRPCServer
通过监听lis
器监听 80 端口,可以为它注册的三个服务 RouteGuide、SomeOther、SomeOtherOther 提供服务(gRPCServer
)?拥有一台服务器服务多个服务是否容易出错?使用具有多个服务的一台服务器时要记住哪些注意事项?