Skip to content

Commit 35faff8

Browse files
committed
reuse buffer when reading messages from websocket.
1 parent cfcd195 commit 35faff8

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

connection.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -121,47 +121,46 @@ func (c *Connection) WriteMessage(data []byte) error {
121121
return nil
122122
}
123123

124-
func (c *Connection) ReadMessage(ctx context.Context) ([]byte, error) {
124+
func (c *Connection) ReadMessage(ctx context.Context, buf io.Writer) error {
125125
for {
126126
select {
127127
case <-ctx.Done():
128-
return nil, errors.New("context canceled")
128+
return errors.New("context canceled")
129129
default:
130130
}
131131

132132
h, err := c.reader.NextFrame()
133133
if err != nil {
134134
c.conn.Close()
135-
return nil, fmt.Errorf("failed to advance frame: %w", err)
135+
return fmt.Errorf("failed to advance frame: %w", err)
136136
}
137137

138138
if h.OpCode.IsControl() {
139139
if err := c.controlHandler(h, c.reader); err != nil {
140-
return nil, fmt.Errorf("failed to handle control frame: %w", err)
140+
return fmt.Errorf("failed to handle control frame: %w", err)
141141
}
142142
} else if h.OpCode == ws.OpBinary ||
143143
h.OpCode == ws.OpText {
144144
break
145145
}
146146

147147
if err := c.reader.Discard(); err != nil {
148-
return nil, fmt.Errorf("failed to discard: %w", err)
148+
return fmt.Errorf("failed to discard: %w", err)
149149
}
150150
}
151151

152-
buf := new(bytes.Buffer)
153152
if c.msgState.IsCompressed() && c.enableCompression {
154153
c.flateReader.Reset(c.reader)
155154
if _, err := io.Copy(buf, c.flateReader); err != nil {
156-
return nil, fmt.Errorf("failed to read message: %w", err)
155+
return fmt.Errorf("failed to read message: %w", err)
157156
}
158157
} else {
159158
if _, err := io.Copy(buf, c.reader); err != nil {
160-
return nil, fmt.Errorf("failed to read message: %w", err)
159+
return fmt.Errorf("failed to read message: %w", err)
161160
}
162161
}
163162

164-
return buf.Bytes(), nil
163+
return nil
165164
}
166165

167166
func (c *Connection) Close() error {

relay.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package nostr
22

33
import (
4+
"bytes"
45
"context"
56
"fmt"
67
"log"
@@ -232,16 +233,18 @@ func (r *Relay) Connect(ctx context.Context) error {
232233

233234
// general message reader loop
234235
go func() {
236+
buf := new(bytes.Buffer)
237+
235238
for {
236-
message, err := conn.ReadMessage(r.connectionContext)
237-
if err != nil {
239+
buf.Reset()
240+
if err := conn.ReadMessage(r.connectionContext, buf); err != nil {
238241
r.ConnectionError = err
239242
r.Close()
240243
break
241244
}
242245

246+
message := buf.Bytes()
243247
debugLogf("{%s} %v\n", r.URL, message)
244-
245248
envelope := ParseMessage(message)
246249
if envelope == nil {
247250
continue

0 commit comments

Comments
 (0)