Skip to content

Commit 64ce945

Browse files
committed
fix: reuse buffer to reduce memory usage: jpillora#475
1 parent 2eb98ff commit 64ce945

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

share/cnet/conn_ws.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cnet
22

33
import (
4+
"bytes"
45
"net"
56
"time"
67

@@ -9,26 +10,27 @@ import (
910

1011
type wsConn struct {
1112
*websocket.Conn
12-
buff []byte
13+
buff *bytes.Buffer
1314
}
1415

15-
//NewWebSocketConn converts a websocket.Conn into a net.Conn
16+
// NewWebSocketConn converts a websocket.Conn into a net.Conn
1617
func NewWebSocketConn(websocketConn *websocket.Conn) net.Conn {
1718
c := wsConn{
1819
Conn: websocketConn,
20+
buff: &bytes.Buffer{},
1921
}
2022
return &c
2123
}
2224

23-
//Read is not threadsafe though thats okay since there
24-
//should never be more than one reader
25+
// Read is not threadsafe though thats okay since there
26+
// should never be more than one reader
2527
func (c *wsConn) Read(dst []byte) (int, error) {
2628
ldst := len(dst)
2729
//use buffer or read new message
2830
var src []byte
29-
if len(c.buff) > 0 {
30-
src = c.buff
31-
c.buff = nil
31+
if c.buff.Len() > 0 {
32+
src = c.buff.Bytes()
33+
c.buff.Reset()
3234
} else if _, msg, err := c.Conn.ReadMessage(); err == nil {
3335
src = msg
3436
} else {
@@ -41,9 +43,7 @@ func (c *wsConn) Read(dst []byte) (int, error) {
4143
n = copy(dst, src[:ldst])
4244
//copy remainder into buffer
4345
r := src[ldst:]
44-
lr := len(r)
45-
c.buff = make([]byte, lr)
46-
copy(c.buff, r)
46+
c.buff.Write(r)
4747
} else {
4848
//copy all of src into dst
4949
n = copy(dst, src)

0 commit comments

Comments
 (0)