我怎么知道两台服务器何时准备接收请求?

时间:2018-11-21 14:02:00

标签: go gin

我有两个服务器

router := createServer()
loginServer := createLoginServerMock()
servLogin := &http.Server{
    Addr:         ":9333",
    Handler:      loginServer,
}
testServer := &http.Server{
    Addr:         ":9444",
    Handler:      router,
}
loginServer.ListenAndServe()
testServer.ListenAndServe()

我想在它们创建后都向他们发送请求吗?我该如何检测?

3 个答案:

答案 0 :(得分:1)

ListenAndServe没有反馈机制可让您知道服务器何时准备就绪。您必须自己创建侦听器并将其传递给Server.Serve

loginListener, err := net.Listen("tcp", ":9333")
if err != nil {
    // TODO: handle err
}

testListener, err := net.Listen("tcp", ":9444")
if err != nil {
    // TODO: handle err
}

// You may already start sending requests now. They will just wait until
// the servers call Accept on their respective listener (i.e. shortly after
// Serve is called).

servLogin := &http.Server{Handler: loginServer}
testServer := &http.Server{Handler: router}

go func() { log.Fatal(servLogin.Serve(loginListener)) }()
go func() { log.Fatal(testServer.Serve(testListener)) }()

答案 1 :(得分:0)

创建服务器失败时,

:将返回错误。只需处理已知服务器启动成功与否即可。我可以看到您的编码只会在测试服务器挂起时启动登录服务器。试试吧

IFS=: read hrs min <<< "$uptime"

答案 2 :(得分:0)

程序将在第一ListenAndServe()处等待,直到发生任何错误。因为ListenAndServe()方法永远运行。因此,您的第二台服务器将永远不会启动,直到执行执行到下一个ListenAndServe()。因此,请在第一台服务器的语句前面使用go

router := createServer()
loginServer := createLoginServerMock()
go func() {
    if err := http.ListenAndServe(":9333", loginServer); err != nil {
        log.Fatal("login server err: ", err)
    }
}()
if err := http.ListenAndServe(":9444", router); err != nil {
    log.Fatal("test server err: ", err)
}

然后在http://localhost:9333访问loginServer,在http://localhost:9444访问testServer