Skip to content

Commit

Permalink
reuse buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
kazeburo committed Jun 7, 2019
1 parent 87a9bb8 commit c776535
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions handler/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ import (
"go.uber.org/zap"
)

// BufferSize for coybuffer and websocket
const BufferSize = 256 * 1024

var (
websocketUpstream uint = 1
upstreamWebsocket uint = 2
Expand Down Expand Up @@ -46,8 +49,8 @@ func New(
logger *zap.Logger) (*Handler, error) {

upgrader := websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
ReadBufferSize: BufferSize,
WriteBufferSize: BufferSize,
HandshakeTimeout: handshakeTimeout,
CheckOrigin: func(r *http.Request) bool {
return true
Expand Down Expand Up @@ -175,6 +178,7 @@ func (h *Handler) Proxy(wg *sync.WaitGroup) func(w http.ResponseWriter, r *http.
// websocket -> server
go func() {
defer func() { doneCh <- true }()
b := make([]byte, BufferSize)
for {
mt, r, err := conn.NextReader()
if websocket.IsCloseError(err,
Expand All @@ -201,7 +205,7 @@ func (h *Handler) Proxy(wg *sync.WaitGroup) func(w http.ResponseWriter, r *http.
if h.dumpTCP > 0 {
r = io.TeeReader(r, dr)
}
n, err := io.Copy(s, r)
n, err := io.CopyBuffer(s, r, b)
if err != nil {
if !goClose {
logger.Warn("Reading from websocket", zap.Error(err))
Expand All @@ -219,8 +223,8 @@ func (h *Handler) Proxy(wg *sync.WaitGroup) func(w http.ResponseWriter, r *http.
// server -> websocket
go func() {
defer func() { doneCh <- true }()
b := make([]byte, BufferSize)
for {
b := make([]byte, 64*1024)
n, err := s.Read(b)
if err != nil {
if !goClose && err != io.EOF {
Expand All @@ -233,11 +237,10 @@ func (h *Handler) Proxy(wg *sync.WaitGroup) func(w http.ResponseWriter, r *http.
return
}

b = b[:n]
if h.dumpTCP > 1 {
ds.Write(b)
}
if err := conn.WriteMessage(websocket.BinaryMessage, b); err != nil {
if err := conn.WriteMessage(websocket.BinaryMessage, b[:n]); err != nil {
if !goClose {
logger.Warn("WriteMessage", zap.Error(err))
hasError = true
Expand Down

0 comments on commit c776535

Please sign in to comment.