package main import ( "flag" "io" "log" "net/http" "strconv" "time" ) var addr = flag.String("addr", ":80", "http service address") // Q=17, R=18 func reqs(x chan int64) { var r int var bytes int64 r = 0 bytes = 0 tck := time.NewTicker(1e9) for { select { case b := <-x: r += 1 bytes += b case <-tck.C: if r != 0 { log.Print(r, " req/s, ", bytes, " bytes/s") r = 0 bytes = 0 } } } } var X chan int64 func main() { flag.Parse() X = make(chan int64, 4096) go reqs(X) http.Handle("/", http.HandlerFunc(QR)) err := http.ListenAndServe(*addr, nil) if err != nil { log.Fatal("ListenAndServe:", err) } } func QR(w http.ResponseWriter, req *http.Request) { var body = "OK" w.Header().Set("Content-Type", "text/plain") w.Header().Set("Content-Length", strconv.Itoa(len(body))) io.WriteString(w, body) X <- req.ContentLength }