valyala/fasthttp

Improve RequestCtx context documentation

已關閉

#1,219 建立於 2022年2月16日

 (3 則留言) (0 個反應) (0 位負責人)Go (1,755 個分叉)batch import
help wantedpending/development

倉庫指標

星標
 (21,741 顆星)
PR 合併指標
 (平均合併 3天) (30 天內合併 44 個 PR)

描述

The context doesnt become Done() on the timeout.

for example, this code:

func main() {
	fasthttp.ListenAndServe(":8080", fasthttp.TimeoutHandler(func(ctx *fasthttp.RequestCtx) {
		log.Println("begin")

		tm := time.NewTimer(10 * time.Second)

		select {
		case <-ctx.Done():
			log.Println("context cancelled")
			return
		case <-tm.C:
			log.Println("process finished ok")
		}

		log.Println("end")
	}, time.Second*2, "timeout"))
}

prints:

2022/02/16 12:52:56 begin
2022/02/16 12:53:06 process finished ok
2022/02/16 12:53:06 end

The client receives the timeout after 2 seconds, and the handler finishes after 10 seconds yet. It would be nice if the context became Done() in this case. If this would break existing code expectations then it can be made optional (via setting or a new TimeoutHandlerWithShutdown or something like it).

Will you accept a PR for this?

貢獻者指南