Skip to content

Commit 250317c

Browse files
author
王荣昌
committed
fix(client): bufferReader replace scanner
1 parent 1134c1e commit 250317c

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

client/transport/sse_helper.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func ReadSSEStream(ctx context.Context, reader io.ReadCloser, onEvent func(event
2222
}
2323
}(reader)
2424

25-
scanner := bufio.NewScanner(reader)
25+
br := bufio.NewReader(reader)
2626
var event, data strings.Builder
2727

2828
processEvent := func() {
@@ -33,12 +33,23 @@ func ReadSSEStream(ctx context.Context, reader io.ReadCloser, onEvent func(event
3333
}
3434
}
3535

36-
for scanner.Scan() {
36+
for {
3737
select {
3838
case <-ctx.Done():
3939
return nil
4040
default:
41-
line := scanner.Text()
41+
line, err := br.ReadString('\n')
42+
if err != nil {
43+
if err == io.EOF {
44+
// Handle last event when EOF
45+
processEvent()
46+
return nil
47+
}
48+
return fmt.Errorf("error reading SSE stream: %w", err)
49+
}
50+
51+
// Remove only newline markers
52+
line = strings.TrimRight(line, "\r\n")
4253

4354
switch {
4455
case strings.HasPrefix(line, "event:"):
@@ -54,8 +65,4 @@ func ReadSSEStream(ctx context.Context, reader io.ReadCloser, onEvent func(event
5465
}
5566
}
5667
}
57-
// EOF Handle the last event after reaching EOF
58-
processEvent()
59-
60-
return scanner.Err()
6168
}

0 commit comments

Comments
 (0)