Golang grpc.server:了解服务器和服务的概念

sam*_*sam 5 go grpc grpc-go protobuf-go

我试图在 gRPC、Protobuf 的背景下理解监听器、服务器和服务的概念。

让我们使用https://grpc.io/docs/languages/go/basics/上的示例作为参考。在这里我们有

  1. 听众: 利斯
  2. gRPC 服务器: grpcServer := grpc.NewServer()
  3. 服务:路线引导服务

看来我们还可以将多个服务注册到同一服务器。

也就是说,除了RouteGuide Service之外,我们还可以说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)
Run Code Online (Sandbox Code Playgroud)

可以说,术语“服务器”在这里似乎已经超载了。不仅是grpcServer,RouteGuide、SomeOther、SomeOtherOther也被称为Server。

我试图弄清楚如何建模或理解这些概念。

我们是否可以说,服务器gRPCServer通过监听器lis监听80端口,并且可以提供向其注册的三个服务RouteGuide、SomeOther、SomeOtherOther(gRPCServer)?一台服务器服务多个服务是否容易出错?使用一台服务器提供多项服务时需要记住哪些注意事项?

Bur*_*dar 1

侦听器侦听给定端口上的连接,当客户端连接时,它会创建一个新的 goroutine 来处理该特定会话。当 goroutine 处理特定的客户端连接时,侦听器继续侦听端口上的新传入连接。

会话只是侦听来自连接的客户端的请求并将它们分派到已注册的服务之一。传入请求包括服务名称、要调用的函数以及该函数的参数。当服务处理请求时,响应将发送回客户端。

因此,正如您所说,服务器侦听一个端口,并可以通过该端口为所有注册的服务提供服务。这不容易出错,并且与定义所有这些功能的一个注册服务没有什么不同。