Skip to content

Commit

Permalink
fix: reuse buffer to reduce memory usage: jpillora#475
Browse files Browse the repository at this point in the history
  • Loading branch information
terminar committed Sep 18, 2024
1 parent 2eb98ff commit 64ce945
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions share/cnet/conn_ws.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cnet

import (
"bytes"
"net"
"time"

Expand All @@ -9,26 +10,27 @@ import (

type wsConn struct {
*websocket.Conn
buff []byte
buff *bytes.Buffer
}

//NewWebSocketConn converts a websocket.Conn into a net.Conn
// NewWebSocketConn converts a websocket.Conn into a net.Conn
func NewWebSocketConn(websocketConn *websocket.Conn) net.Conn {
c := wsConn{
Conn: websocketConn,
buff: &bytes.Buffer{},
}
return &c
}

//Read is not threadsafe though thats okay since there
//should never be more than one reader
// Read is not threadsafe though thats okay since there
// should never be more than one reader
func (c *wsConn) Read(dst []byte) (int, error) {
ldst := len(dst)
//use buffer or read new message
var src []byte
if len(c.buff) > 0 {
src = c.buff
c.buff = nil
if c.buff.Len() > 0 {
src = c.buff.Bytes()
c.buff.Reset()
} else if _, msg, err := c.Conn.ReadMessage(); err == nil {
src = msg
} else {
Expand All @@ -41,9 +43,7 @@ func (c *wsConn) Read(dst []byte) (int, error) {
n = copy(dst, src[:ldst])
//copy remainder into buffer
r := src[ldst:]
lr := len(r)
c.buff = make([]byte, lr)
copy(c.buff, r)
c.buff.Write(r)
} else {
//copy all of src into dst
n = copy(dst, src)
Expand Down

0 comments on commit 64ce945

Please sign in to comment.