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

我有两台服务器


router := createServer()

loginServer := createLoginServerMock()

servLogin := &http.Server{

    Addr:         ":9333",

    Handler:      loginServer,

}

testServer := &http.Server{

    Addr:         ":9444",

    Handler:      router,

}

loginServer.ListenAndServe()

testServer.ListenAndServe()

我想在他们创建后向他们发送请求?我怎样才能检测到?


www说
浏览 116回答 3
3回答

郎朗坤

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)) }()

隔江千里

该程序将在 1st 等待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)}然后loginServer在http://localhost:9333和testServerhttp ://localhost:9444访问你的。

冉冉说

ListenAndServe()创建服务器失败时将返回错误。只需将其处理为已知的服务器启动成功与否。我可以看到您的编码只会在测试服务器挂起时启动登录服务器。咱们试试吧go func() {   log.Fatal(loginServer.ListenAndServe()) } log.Fatal(testServer.ListenAndServe())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go