我怎么知道两台服务器何时准备好接收请求?
How can I know when two servers are ready to get requests?
我有两台服务器
router := createServer()
loginServer := createLoginServerMock()
servLogin := &http.Server{
Addr: ":9333",
Handler: loginServer,
}
testServer := &http.Server{
Addr: ":9444",
Handler: router,
}
loginServer.ListenAndServe()
testServer.ListenAndServe()
我想在他们创建后向他们发送请求?我该如何检测?
ListenAndServe()
创建服务器失败时会 return 报错。只需将其处理为已知的服务器启动成功与否。我可以看到您的编码只会在测试服务器挂起时启动登录服务器。让我们试试
go func() {
log.Fatal(loginServer.ListenAndServe())
}
log.Fatal(testServer.ListenAndServe())
程序将在第一个 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 and testServer
at http://localhost:9444 访问您的 loginServer
。
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)) }()
我有两台服务器
router := createServer()
loginServer := createLoginServerMock()
servLogin := &http.Server{
Addr: ":9333",
Handler: loginServer,
}
testServer := &http.Server{
Addr: ":9444",
Handler: router,
}
loginServer.ListenAndServe()
testServer.ListenAndServe()
我想在他们创建后向他们发送请求?我该如何检测?
ListenAndServe()
创建服务器失败时会 return 报错。只需将其处理为已知的服务器启动成功与否。我可以看到您的编码只会在测试服务器挂起时启动登录服务器。让我们试试
go func() {
log.Fatal(loginServer.ListenAndServe())
}
log.Fatal(testServer.ListenAndServe())
程序将在第一个 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 and testServer
at http://localhost:9444 访问您的 loginServer
。
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)) }()