Skip to content

Commit 3e4d7fd

Browse files
committed
Reuse buffer
jpillora#475
1 parent dd3b19b commit 3e4d7fd

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

share/cnet/conn_ws.go

+7-7
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,13 +10,14 @@ import (
910

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

1516
// 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
}
@@ -26,9 +28,9 @@ 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)