服务端频繁出现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()
}