看起来即使连接丢失了,处理程序功能仍然在运行,例如,如果我访问http://0.0.0.0:8000/home并突然关闭浏览器,屏幕将继续打印所有的数字。
package main
import (
"fmt"
"net/http"
"time"
)
func main() {
http.HandleFunc("/home", func(w http.ResponseWriter, r *http.Request) {
i := 0
for {
fmt.Println("i", i)
i++
time.Sleep(time.Microsecond * 15)
}
})
http.ListenAndServe(":8000", nil)
}
相关:How golang gin stop handler function immediately if connection is lost
1条答案
按热度按时间ljsrvy3e1#
备选案文1:在断开的连接上写入将返回错误。当fmt.println返回错误时,将从循环中中断。
备选案文2:服务器在断开连接时取消请求上下文。在上下文未取消时循环。
备选案文3:服务器在断开连接时取消请求上下文。循环等待上下文取消或计时器。取消时退出。
处理程序将使用选项3提前返回。选项1和2始终等待休眠完成,然后处理程序返回。