good morning!!!!

Skip to content
Snippets Groups Projects
Unverified Commit 2cf6c288 authored by Anmol Sethi's avatar Anmol Sethi
Browse files

Implement compression writer and reader pooling

parent 53c1aea0
No related branches found
No related tags found
No related merge requests found
...@@ -4,6 +4,7 @@ package websocket ...@@ -4,6 +4,7 @@ package websocket
import ( import (
"bufio" "bufio"
"compress/flate"
"context" "context"
"crypto/rand" "crypto/rand"
"encoding/binary" "encoding/binary"
...@@ -1063,3 +1064,55 @@ func (c *Conn) extractBufioWriterBuf(w io.Writer) { ...@@ -1063,3 +1064,55 @@ func (c *Conn) extractBufioWriterBuf(w io.Writer) {
c.bw.Reset(w) c.bw.Reset(w)
} }
var flateWriterPoolsMu sync.Mutex
var flateWriterPools = make(map[int]*sync.Pool)
func getFlateWriterPool(level int) *sync.Pool {
flateWriterPoolsMu.Lock()
defer flateWriterPoolsMu.Unlock()
p, ok := flateWriterPools[level]
if !ok {
p = &sync.Pool{
New: func() interface{} {
w, err := flate.NewWriter(nil, level)
if err != nil {
panic("websocket: unexpected error from flate.NewWriter: " + err.Error())
}
return w
},
}
flateWriterPools[level] = p
}
return p
}
func getFlateWriter(w io.Writer, level int) *flate.Writer {
p := getFlateWriterPool(level)
fw := p.Get().(*flate.Writer)
fw.Reset(w)
return fw
}
func putFlateWriter(w *flate.Writer, level int) {
p := getFlateWriterPool(level)
p.Put(w)
}
var flateReaderPool = &sync.Pool{
New: func() interface{} {
return flate.NewReader(nil)
},
}
func getFlateReader(r flate.Reader) io.ReadCloser {
fr := flateReaderPool.Get().(io.ReadCloser)
fr.(flate.Resetter).Reset(r, nil)
return fr
}
func putFlateReader(fr io.ReadCloser) {
flateReaderPool.Put(fr)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment