Commit 3e967e1d authored by Jaana Burcu Dogan's avatar Jaana Burcu Dogan Committed by Brad Fitzpatrick

http2/h2demo: add HTTP/2 with Server Push

Server Push of tiles are not always the fastest. But, it
might be good to have the sample available to demonstrate
how Push is handled by the browser.

Change-Id: I967db9693e0889a889a36ad82248acef2c6db8d4
Reviewed-on: https://go-review.googlesource.com/38349Reviewed-by: 's avatarTom Bergan <tombergan@google.com>
Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Tom Bergan <tombergan@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent a6577fac
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment