Я пытаюсь понять понятия Listener, Server и Services в контексте gRPC, Protobuf.
Давайте использовать пример на https://grpc.io/docs/languages/go/basics/ в качестве ссылки. Здесь у нас есть
- Слушатель: Лис
- Сервер gRPC: grpcServer: = grpc.NewServer ()
- Сервис: Сервис RouteGuide
Похоже, что на одном сервере может быть зарегистрировано несколько сервисов.
То есть, помимо услуги RouteGuide, мы можем сказать SomeOther Service, SomeOtherOther Service.
И мы можем зарегистрировать все три и ожидать, что сервер сможет обслуживать методы, принадлежащие этим трем службам (RouteGuide, SomeOther, SomeOtherOther).
Допустим, у каждого из RouteGuide, SomeOther, SomeOtherOther есть свои собственные прото-файлы, специфичные для них. И все прото находятся в одном пространстве имен (значение 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)
Похоже, термин «сервер» здесь, так сказать, перегружен. Не только grpcServer, но также RouteGuide, SomeOther и SomeOtherOther также называются серверами.
Я пытаюсь понять, как моделировать или понимать эти понятия.
Можно ли сказать, что сервер gRPCServer
через прослушиватель lis
прослушивает порт 80 и может обслуживать три службы RouteGuide, SomeOther, SomeOtherOther, которые зарегистрированы в нем (gRPCServer
)? Подвержен ли один сервер, обслуживающий несколько сервисов, ошибкой? Какие предостережения следует иметь в виду при использовании одного сервера с несколькими службами?