How can I know when two servers are ready to get requests?












1















I have two servers



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


And I want to send request on both of them after they created? How can I detect that?










share|improve this question





























    1















    I have two servers



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


    And I want to send request on both of them after they created? How can I detect that?










    share|improve this question



























      1












      1








      1








      I have two servers



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


      And I want to send request on both of them after they created? How can I detect that?










      share|improve this question
















      I have two servers



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


      And I want to send request on both of them after they created? How can I detect that?







      go gin






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 21 '18 at 15:52









      Flimzy

      37.8k96497




      37.8k96497










      asked Nov 21 '18 at 14:02









      Юра ПанаринЮра Панарин

      42449




      42449
























          3 Answers
          3






          active

          oldest

          votes


















          1














          ListenAndServe has no feedback mechanism to let you know when the server is ready. You have to create the listener yourself and pass it to 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)) }()





          share|improve this answer































            0














            ListenAndServe() will return an error when create server failed. Just handle it to known server start success or not. I can see your coding will only start login server while test server be hanging. Let's try



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





            share|improve this answer































              0














              The program will wait at 1st ListenAndServe() until any error occurred. Because the ListenAndServe() method runs forever. So your second server will never started until the execution goes to the next ListenAndServe(). So use go in front of the 1st server's statement:



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


              Then access your loginServer at http://localhost:9333 and testServer at http://localhost:9444.






              share|improve this answer


























              • Problem not in start, I wanna send request on two that servers and sometimes they not running both

                – Юра Панарин
                Nov 21 '18 at 14:22











              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53413791%2fhow-can-i-know-when-two-servers-are-ready-to-get-requests%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              3 Answers
              3






              active

              oldest

              votes








              3 Answers
              3






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              ListenAndServe has no feedback mechanism to let you know when the server is ready. You have to create the listener yourself and pass it to 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)) }()





              share|improve this answer




























                1














                ListenAndServe has no feedback mechanism to let you know when the server is ready. You have to create the listener yourself and pass it to 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)) }()





                share|improve this answer


























                  1












                  1








                  1







                  ListenAndServe has no feedback mechanism to let you know when the server is ready. You have to create the listener yourself and pass it to 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)) }()





                  share|improve this answer













                  ListenAndServe has no feedback mechanism to let you know when the server is ready. You have to create the listener yourself and pass it to 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)) }()






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 21 '18 at 14:31









                  PeterPeter

                  15.8k42332




                  15.8k42332

























                      0














                      ListenAndServe() will return an error when create server failed. Just handle it to known server start success or not. I can see your coding will only start login server while test server be hanging. Let's try



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





                      share|improve this answer




























                        0














                        ListenAndServe() will return an error when create server failed. Just handle it to known server start success or not. I can see your coding will only start login server while test server be hanging. Let's try



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





                        share|improve this answer


























                          0












                          0








                          0







                          ListenAndServe() will return an error when create server failed. Just handle it to known server start success or not. I can see your coding will only start login server while test server be hanging. Let's try



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





                          share|improve this answer













                          ListenAndServe() will return an error when create server failed. Just handle it to known server start success or not. I can see your coding will only start login server while test server be hanging. Let's try



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






                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 21 '18 at 14:13









                          KibGzrKibGzr

                          1,466610




                          1,466610























                              0














                              The program will wait at 1st ListenAndServe() until any error occurred. Because the ListenAndServe() method runs forever. So your second server will never started until the execution goes to the next ListenAndServe(). So use go in front of the 1st server's statement:



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


                              Then access your loginServer at http://localhost:9333 and testServer at http://localhost:9444.






                              share|improve this answer


























                              • Problem not in start, I wanna send request on two that servers and sometimes they not running both

                                – Юра Панарин
                                Nov 21 '18 at 14:22
















                              0














                              The program will wait at 1st ListenAndServe() until any error occurred. Because the ListenAndServe() method runs forever. So your second server will never started until the execution goes to the next ListenAndServe(). So use go in front of the 1st server's statement:



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


                              Then access your loginServer at http://localhost:9333 and testServer at http://localhost:9444.






                              share|improve this answer


























                              • Problem not in start, I wanna send request on two that servers and sometimes they not running both

                                – Юра Панарин
                                Nov 21 '18 at 14:22














                              0












                              0








                              0







                              The program will wait at 1st ListenAndServe() until any error occurred. Because the ListenAndServe() method runs forever. So your second server will never started until the execution goes to the next ListenAndServe(). So use go in front of the 1st server's statement:



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


                              Then access your loginServer at http://localhost:9333 and testServer at http://localhost:9444.






                              share|improve this answer















                              The program will wait at 1st ListenAndServe() until any error occurred. Because the ListenAndServe() method runs forever. So your second server will never started until the execution goes to the next ListenAndServe(). So use go in front of the 1st server's statement:



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


                              Then access your loginServer at http://localhost:9333 and testServer at http://localhost:9444.







                              share|improve this answer














                              share|improve this answer



                              share|improve this answer








                              edited Nov 21 '18 at 15:07

























                              answered Nov 21 '18 at 14:14









                              Shudipta SharmaShudipta Sharma

                              1,029312




                              1,029312













                              • Problem not in start, I wanna send request on two that servers and sometimes they not running both

                                – Юра Панарин
                                Nov 21 '18 at 14:22



















                              • Problem not in start, I wanna send request on two that servers and sometimes they not running both

                                – Юра Панарин
                                Nov 21 '18 at 14:22

















                              Problem not in start, I wanna send request on two that servers and sometimes they not running both

                              – Юра Панарин
                              Nov 21 '18 at 14:22





                              Problem not in start, I wanna send request on two that servers and sometimes they not running both

                              – Юра Панарин
                              Nov 21 '18 at 14:22


















                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53413791%2fhow-can-i-know-when-two-servers-are-ready-to-get-requests%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Ottavio Pratesi

                              Tricia Helfer

                              15 giugno