服务端频繁出现context cancel错误

客户端主动取消请求(例如主动取消,或者请求超过客户端设置的时间)后,特别是浏览器访问时直接取消请求,服务端可能会遇到context canceled的错误。这个属于正常现象,Golang标准库的http server设计亦如此。当客户端不再需要这个请求的结果时会取消请求,这时服务端继续往下执行也没有了意义。如果介意这个错误,可以使用一个自定义的中间件增加NeverDoneCtx的处理逻辑,这个时候服务端会忽略客户端的取消请求并继续往下执行。

// MiddlewareNeverDoneCtx sets the context never done for current process.
func MiddlewareNeverDoneCtx(r *Request) {
	r.SetCtx(r.GetNeverDoneCtx())
	r.Middleware.Next()
}





Content Menu

  • No labels