问题描述
我正在尝试在 Go 应用程序中同时启动 http 和 gRPC 服务。但令我惊讶的是,只有 http 服务器或 gRPC 服务器可以启动。
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不能。 反之亦然
解决方法
将第一部分放入 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)
}
}