From 31dac80e66c31a123e56b116e8173f64d1a88d2d Mon Sep 17 00:00:00 2001 From: Christopher Speller Date: Wed, 28 Oct 2020 13:24:01 -0700 Subject: [PATCH] Revert "MM-29979: make websocket writes zero-alloc (#16098)" (#16110) Automatic Merge --- app/web_conn.go | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/app/web_conn.go b/app/web_conn.go index 44662ea261..6082751a4d 100644 --- a/app/web_conn.go +++ b/app/web_conn.go @@ -4,8 +4,6 @@ package app import ( - "bytes" - "encoding/json" "fmt" "sync" "sync/atomic" @@ -171,11 +169,6 @@ func (wc *WebConn) writePump() { wc.WebSocket.Close() }() - var buf bytes.Buffer - // 2k is seen to be a good heuristic under which 98.5% of message sizes remain. - buf.Grow(1024 * 2) - enc := json.NewEncoder(&buf) - for { select { case msg, ok := <-wc.send: @@ -208,25 +201,20 @@ func (wc *WebConn) writePump() { continue } - buf.Reset() - var err error + var msgBytes []byte if evtOk { cpyEvt := evt.SetSequence(wc.Sequence) - err = enc.Encode(cpyEvt) + msgBytes = []byte(cpyEvt.ToJson()) wc.Sequence++ } else { - err = enc.Encode(msg) - } - if err != nil { - mlog.Warn("Error in encoding websocket message", mlog.Err(err)) - continue + msgBytes = []byte(msg.ToJson()) } if len(wc.send) >= sendFullWarn { logData := []mlog.Field{ mlog.String("user_id", wc.UserId), mlog.String("type", msg.EventType()), - mlog.Int("size", buf.Len()), + mlog.Int("size", len(msgBytes)), } if evtOk { logData = append(logData, mlog.String("channel_id", evt.GetBroadcast().ChannelId)) @@ -236,7 +224,7 @@ func (wc *WebConn) writePump() { } wc.WebSocket.SetWriteDeadline(time.Now().Add(writeWaitTime)) - if err := wc.WebSocket.WriteMessage(websocket.TextMessage, buf.Bytes()); err != nil { + if err := wc.WebSocket.WriteMessage(websocket.TextMessage, msgBytes); err != nil { wc.logSocketErr("websocket.send", err) return }