为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
www说 2023-05-08 18:12:00
我有两台服务器router := createServer()loginServer := createLoginServerMock()servLogin := &http.Server{    Addr:         ":9333",    Handler:      loginServer,}testServer := &http.Server{    Addr:         ":9444",    Handler:      router,}loginServer.ListenAndServe()testServer.ListenAndServe()我想在他们创建后向他们发送请求?我怎样才能检测到?
查看完整描述

3 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

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


查看完整回答
反对 回复 2023-05-08
?
隔江千里

TA贡献1906条经验 获得超10个赞

该程序将在 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)

}

然后loginServerhttp://localhost:9333testServerhttp ://localhost:9444访问你的。



查看完整回答
反对 回复 2023-05-08
?
冉冉说

TA贡献1877条经验 获得超1个赞

ListenAndServe()创建服务器失败时将返回错误。只需将其处理为已知的服务器启动成功与否。我可以看到您的编码只会在测试服务器挂起时启动登录服务器。咱们试试吧

go func() {
  log.Fatal(loginServer.ListenAndServe())
}
log.Fatal(testServer.ListenAndServe())


查看完整回答
反对 回复 2023-05-08
  • 3 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信