我使用的是官方文档https://grpc.io/docs/languages/go/basics/,但是实现之后,问题出现了。当我创建一个TCP服务器时,我必须指定主机和端口(在我的例子中是mcrsrv-book:7561)。但是如果我想为GRPC实现另一个API呢?我需要在一个新端口上启动另一个服务器吗(例如mcrsrv-book:7562)?路由和API在grpc中是如何实现的?
我的服务器代码是:
type routeGuideServer struct {
pb.UnimplementedRouteGuideServer
savedFeatures []*pb.Response // read-only after initialized
}
// GetFeature returns the feature at the given point.
func (s *routeGuideServer) GetFeature(ctx context.Context, request *pb.Request) (*pb.Response, error) {
context := localContext.LocalContext{}
book := bookRepository.FindOrFailBook(context, int(request.BookId))
return &pb.Response{
Name: book.Name,
BookId: int32(book.BookId),
AuthorId: int32(book.AuthorId),
Category: book.Category,
Description: "Описание",
}, nil
}
func newServer() *routeGuideServer {
s := &routeGuideServer{}
return s
}
func SomeAction() {
lis, err := net.Listen("tcp", fmt.Sprintf("mcrsrv-book:7561"))
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
var opts []grpc.ServerOption
grpcServer := grpc.NewServer(opts...)
pb.RegisterRouteGuideServer(grpcServer, newServer())
grpcServer.Serve(lis)
}
我认为除了为每个grpc服务打开一个单独的端口之外,应该有其他选择。
grpc中的api是如何实现的?
1条答案
按热度按时间blmhpbnm1#
如果您想为不同的服务使用相同的地址,您可以在启动grpc服务器之前重新注册其他服务。
这个stackoverflow线程可以作为一个例子来帮助你实现你想要的目标。这个问题提供了一个示例代码,我相信它与你所问的一致。
Access multiple gRPC services over the same connection