From 771f7c6892a33aadeb8aab71f4af4122c32ff478 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Mon, 11 Sep 2017 12:12:23 +0200 Subject: [PATCH] Meet the 500ms timeout * First, lower the MaxResponseTime which is used in the Handler to cancel the running goroutines and finalize the result. Since we want to stay below 500ms we cannot pick 500ms, because the finalization steps take some time too. * Second, set WriteTimeout to 500ms in order to make sure the handler never exceeds that timeframe. --- src/numbers/numbers.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/numbers/numbers.go b/src/numbers/numbers.go index 67b4866..90d2c80 100644 --- a/src/numbers/numbers.go +++ b/src/numbers/numbers.go @@ -20,18 +20,21 @@ type Numbers struct { } // The maximum response time of the handlers. -var MaxResponseTime time.Duration = 500 * time.Millisecond +var MaxResponseTime time.Duration = 450 * time.Millisecond // The main entry point of the backend. func main() { - listenAddr := flag.String("http.addr", ":8090", "http listen address") - flag.Parse() - http.HandleFunc("/numbers", func(w http.ResponseWriter, r *http.Request) { numbersHandler(w, r) }) - log.Fatal(http.ListenAndServe(*listenAddr, nil)) + s := &http.Server{ + Addr: ":8090", + ReadTimeout: 2 * time.Second, + WriteTimeout: 500 * time.Millisecond, + } + + log.Fatal(s.ListenAndServe()) } // The main handler. The expected request is of the form: