如何解决为什么我不能在同一个 Go 项目中启动两台服务器?
我是一名新的 Go 开发人员,我正在尝试构建一个具有 gRPC 服务器和 Gin HTTP 服务器的单个项目。这是我的代码大致的样子:
package main
import (
"log"
"net"
"github.com/gin-gonic/gin"
"google.golang.org/grpc"
)
func main() {
startGRPCServer()
startHTTPServer()
}
func startGRPCServer() {
listener,err := net.Listen("tcp",":9000")
if err != nil {
log.Fatalf("could not attach listener to port: %v",err)
}
s := grpc.NewServer()
if err := s.Serve(listener); err != nil {
log.Fatalf("could not start grpc server: %v",err)
}
}
func startHTTPServer() {
g := gin.Default()
if err := g.Run(":8000"); err != nil {
log.Fatalf("could not start http server: %v",err)
}
}
当我运行上面的代码时,只有 gRPC 服务器启动。 startHTTPServer()
函数甚至不会被调用。当我切换调用顺序(在 startHTTPServer()
上方移动 startGRPCServer()
)时,startGRPCServer()
函数永远不会被调用。为什么会发生这种情况?我该如何解决这个问题,以便调用两个函数并运行两个服务器?
解决方法
startGRPCServer 函数阻止运行 grpc 服务器。在 goroutine 中运行 GRPC 服务器,以便 startGRPCServer 返回。
func startGRPCServer() {
listener,err := net.Listen("tcp",":9000")
if err != nil {
log.Fatalf("could not attach listener to port: %v",err)
}
s := grpc.NewServer()
go func() {
if err := s.Serve(listener); err != nil {
log.Fatalf("could not start grpc server: %v",err)
}
}()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。