Skip to content

Commit

Permalink
global pool
Browse files Browse the repository at this point in the history
  • Loading branch information
kazeburo committed Jun 7, 2019
1 parent a16f198 commit 7eb880a
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions proxy/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,20 +46,19 @@ type Proxy struct {
Transport http.RoundTripper
upstream *upstream.Upstream
logger *zap.Logger
pool *sync.Pool
}

var pool = sync.Pool{
New: func() interface{} { return make([]byte, 32*1024) },
}

// New : Create a request-based reverse-proxy.
func New(transport *http.RoundTripper, version string, upstream *upstream.Upstream, logger *zap.Logger) *Proxy {
pool := sync.Pool{
New: func() interface{} { return make([]byte, 32*1024) },
}
return &Proxy{
Version: version,
Transport: *transport,
upstream: upstream,
logger: logger,
pool: &pool,
}
}

Expand Down Expand Up @@ -128,8 +127,12 @@ func (proxy *Proxy) ServeHTTP(writer http.ResponseWriter, originalRequest *http.
return
}

// Ensure a response body from upstream will be always closed.
defer response.Body.Close()
buf := pool.Get().([]byte)
defer func() {
defer response.Body.Close()
// Ensure a response body from upstream will be always closed.
defer pool.Put(buf)
}()

// Copy all header fields.
nv := 0
Expand All @@ -150,8 +153,6 @@ func (proxy *Proxy) ServeHTTP(writer http.ResponseWriter, originalRequest *http.
writer.WriteHeader(response.StatusCode)

// Copy a response body.
buf := proxy.pool.Get().([]byte)
defer proxy.pool.Put(buf)
io.CopyBuffer(writer, response.Body, buf)
}

Expand Down

0 comments on commit 7eb880a

Please sign in to comment.