Nag*_*Nag -2 go go-gin grpc-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)
        }
    }()
}
| 归档时间: | 
 | 
| 查看次数: | 1652 次 | 
| 最近记录: |