diff --git a/sse.go b/sse.go index 6ef961d..38b70a5 100644 --- a/sse.go +++ b/sse.go @@ -315,12 +315,20 @@ func splitSSELines(b []byte) [][]byte { // "\r" of any kind ever reaches the wire from here, regardless of what // readSSE upstream of this call did or did not already split it on. func (s *sseWriter) writeData(b []byte) error { - lines := splitSSELines(b) - buf := make([]byte, 0, len(b)+len(lines)*len(sseDataPrefix)+1) - for _, line := range lines { + var buf []byte + if !bytes.ContainsAny(b, "\r\n") { + buf = make([]byte, 0, len(sseDataPrefix)+len(b)+2) buf = append(buf, sseDataPrefix...) - buf = append(buf, line...) + buf = append(buf, b...) buf = append(buf, '\n') + } else { + lines := splitSSELines(b) + buf = make([]byte, 0, len(b)+len(lines)*len(sseDataPrefix)+1) + for _, line := range lines { + buf = append(buf, sseDataPrefix...) + buf = append(buf, line...) + buf = append(buf, '\n') + } } buf = append(buf, '\n')