server.Shutdown 也会直接中断正在发数据的连接吗?
不 Shutdown 的话正常应该发送 60 个 asd,我在第 5 个调用了 Shutdown,连接直接被中断了。
请问一下大家这个是怎么回事?
var server *http.Server
server = &http.Server{
IdleTimeout: 60*time.Second,
WriteTimeout: 60*time.Second,
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Length", "181")
w.WriteHeader(200)
for i := 0; i < 60; i++ {
if i == 5 {
//server.SetKeepAlivesEnabled(false)
_, _ = w.Write([]byte("zxc"))
fmt.Println(server.Shutdown(context.Background()))
_, _ = w.Write([]byte("qwe"))
}
_, _ = w.Write([]byte("asd"))
if flusher, ok := w.( http.Flusher); ok {
flusher.Flush()
} else {
fmt.Println("Not flushable")
}
//time.Sleep(time.Second)
}
_, _ = w.Write([]byte("\n"))
}),
}
err = server.Serve(ServeHTTP)
fmt.Println(err)
$ telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
GET / HTTP/1.1
Host: 127.0.0.1
HTTP/1.1 200 OK
Content-Length: 181
Date: Mon, 29 Apr 2019 15:14:18 GMT
Content-Type: text/plain; charset=utf-8
asdasdasdasdasdConnection closed by foreign host.
1
fcten 2019-04-30 10:24:08 +08:00 1
https://golang.org/pkg/net/http/#Server.Shutdown
When Shutdown is called, Serve, ListenAndServe, and ListenAndServeTLS immediately return ErrServerClosed. Make sure the program doesn't exit and waits instead for Shutdown to return. |
2
zzzzzzzzzp 2019-04-30 10:45:04 +08:00 1
// Shutdown works by first closing all open
// listeners, then closing all idle connections, and then waiting // indefinitely for connections to return to idle and then shut down. 补充楼上,waiting indefinitely. |
3
jinliming2 OP 非常感谢,加一个 chan 等一下就好了,成功了
|