summaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/net/http2/h2demo/h2demo.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/net/http2/h2demo/h2demo.go')
-rw-r--r--vendor/golang.org/x/net/http2/h2demo/h2demo.go26
1 files changed, 24 insertions, 2 deletions
diff --git a/vendor/golang.org/x/net/http2/h2demo/h2demo.go b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
index 980b6d67d..fa5978ee5 100644
--- a/vendor/golang.org/x/net/http2/h2demo/h2demo.go
+++ b/vendor/golang.org/x/net/http2/h2demo/h2demo.go
@@ -313,6 +313,13 @@ func newGopherTilesHandler() http.Handler {
}
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ms, _ := strconv.Atoi(r.FormValue("latency"))
+ push, _ := strconv.ParseBool(r.FormValue("push"))
+
+ cacheBust := time.Now().UnixNano()
+ if push {
+ pushTiles(w, cacheBust, ms, xt, yt)
+ }
+
const nanosPerMilli = 1e6
if r.FormValue("x") != "" {
x, _ := strconv.Atoi(r.FormValue("x"))
@@ -329,13 +336,13 @@ func newGopherTilesHandler() http.Handler {
fmt.Fprintf(w, "A grid of %d tiled images is below. Compare:<p>", xt*yt)
for _, ms := range []int{0, 30, 200, 1000} {
d := time.Duration(ms) * nanosPerMilli
- fmt.Fprintf(w, "[<a href='https://%s/gophertiles?latency=%d'>HTTP/2, %v latency</a>] [<a href='http://%s/gophertiles?latency=%d'>HTTP/1, %v latency</a>]<br>\n",
+ fmt.Fprintf(w, "[<a href='https://%s/gophertiles?latency=%d'>HTTP/2, %v latency</a>] [<a href='https://%s/gophertiles?latency=%d&push=true'>HTTP/2, %v latency with Server Push</a>] [<a href='http://%s/gophertiles?latency=%d'>HTTP/1, %v latency</a>]<br>\n",
+ httpsHost(), ms, d,
httpsHost(), ms, d,
httpHost(), ms, d,
)
}
io.WriteString(w, "<p>\n")
- cacheBust := time.Now().UnixNano()
for y := 0; y < yt; y++ {
for x := 0; x < xt; x++ {
fmt.Fprintf(w, "<img width=%d height=%d src='/gophertiles?x=%d&y=%d&cachebust=%d&latency=%d'>",
@@ -356,6 +363,21 @@ function showtimes() {
})
}
+func pushTiles(w http.ResponseWriter, cacheBust int64, latency int, xt, yt int) {
+ pusher, ok := w.(http.Pusher)
+ if !ok {
+ return
+ }
+ for y := 0; y < yt; y++ {
+ for x := 0; x < xt; x++ {
+ img := fmt.Sprintf("/gophertiles?x=%d&y=%d&cachebust=%d&latency=%d", x, y, cacheBust, latency)
+ if err := pusher.Push(img, nil); err != nil {
+ log.Printf("Failed to push %v: %v", img, err)
+ }
+ }
+ }
+}
+
func httpsHost() string {
if *hostHTTPS != "" {
return *hostHTTPS