Skip to content

Instantly share code, notes, and snippets.

@wlhee
Created November 23, 2019 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wlhee/77ee97862c376a43b2a091d90e123789 to your computer and use it in GitHub Desktop.
Save wlhee/77ee97862c376a43b2a091d90e123789 to your computer and use it in GitHub Desktop.
slow client
package main
import (
"fmt"
"net/http"
"os"
"time"
"google3/base/go/flag"
)
var (
url = flag.String("url", "", "URL")
transportBuffer = flag.Int("transport_buffer", 10, "transport buffer size in bytes used by HTTP client")
readBuffer = flag.Int("read_buffer", 1, "read buffer size in bytes used for reading bytes from the trasport buffer")
readInterval = flag.Duration("read_interval", time.Second, "interval to read from the transport buffer into the read buffer")
)
func main() {
flag.Parse()
fmt.Println("=======================\n")
fmt.Printf("URL: %s\ntransport_buffer: %d\nread_buffer:%d\nread_interval: %v\n", *url, *transportBuffer, *readBuffer, *readInterval)
transport := &http.Transport{
ReadBufferSize: *transportBuffer,
}
fmt.Println("=======================\n\n")
client := &http.Client{Transport: transport}
response, err := client.Get(*url)
if err != nil {
fmt.Printf("%v\n", err)
os.Exit(1)
}
defer response.Body.Close()
for k, v := range response.Header {
fmt.Printf("%s:%s\n", k, v)
}
buffer := make([]byte, *readBuffer)
for {
n, err := response.Body.Read(buffer)
if err != nil {
fmt.Printf("Read error: %v\n", err)
os.Exit(1)
}
fmt.Printf("Read %d bytes: %s\n", n, string(buffer))
time.Sleep(*readInterval)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment