猿问

我正常停止http.ListenAndServe失败

我是Go程序员的新手。


我正在编写一个Web应用程序,我需要服务器等待活动请求发出后再关闭。


我写了一个处理程序,等待5秒钟回答。如果我发出请求并停止服务器(在5秒钟之前),则会收到“无法连接”错误。


有没有一种方法可以停止监听新请求并等待活动请求完成?


这是我的例子


func main() {

    log.Infof("Starting (PID %d)...", os.Getpid())


    stop := make(chan os.Signal, 1)

    signal.Notify(stop, syscall.SIGTERM)

    signal.Notify(stop, syscall.SIGINT)


    listenAt := "127.0.0.1:8000"


    r := newRouter()

    h := &http.Server{Addr: listenAt, Handler: r}


    go func() {

        log.Info("Serving on http://", listenAt)


        if err := h.ListenAndServe(); err != nil {

            log.Fatal(err)

        }

    }()

    <-stop


    log.Info("Stoping ...")

    h.Shutdown(context.Background())

    log.Info("Bye :)")

}

示例处理程序


func handler(w http.ResponseWriter, r *http.Request) {

    time.Sleep(5 * time.Second)

    log.Info("new request")

    fmt.Fprintf(w, "Hola!")

}

完整示例@ https://gist.github.com/nachopro/d80fa71ae49527e1ddcaf359b4ff488b


临摹微笑
浏览 481回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答