【问题标题】:Why is that only http or gRPC is able to start up in go application?为什么只有 http 或 gRPC 能够在 go 应用程序中启动?
【发布时间】:2021-02-20 20:45:41
【问题描述】:

我正在尝试在 Go 应用程序中同时启动 http 和 gRPC 服务。但令我惊讶的是,只有 http server 或 gRPC server 可以启动。

func main() {
    xxhh.Test1()
    xxhh.Test2()

    app := fiber.New()

    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World ????!")
    })

    app.Listen(":3000")

    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()

    pb.RegisterBookstoreServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to start grpc serve: %v", err)
    }

}

而且我还发现,如果我把http部分放在最前面,那么http可以启动,而gRPC不能。 反之亦然

【问题讨论】:

    标签: go grpc grpc-node


    【解决方案1】:

    将第一部分放在 Goroutines 中,如下所示

    func main() {
    xxhh.Test1()
    xxhh.Test2()
    
    app := fiber.New()
    
    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Hello, World ?!")
    })
    
    go func() {
        log.Fatal(app.Listen(":3000"))
    }()    
    
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    
    pb.RegisterBookstoreServer(s, &server{})
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to start grpc serve: %v", err)
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多