Tweak grid for less writes (#20129)

Use `runtime.Gosched()` if we have less than maxMergeMessages and the 
queue is empty.  Up maxMergeMessages to 50 to merge more messages into 
a single write.

Add length check for an early bailout on readAllInto when we know packet length.
This commit is contained in:
Klaus Post
2024-07-23 03:28:14 -07:00
committed by GitHub
parent 4f5dded4d4
commit c0e2886e37
2 changed files with 27 additions and 8 deletions

View File

@@ -57,7 +57,7 @@ const (
biggerBufMax = maxBufferSize
// If there is a queue, merge up to this many messages.
maxMergeMessages = 30
maxMergeMessages = 50
// clientPingInterval will ping the remote handler every 15 seconds.
// Clients disconnect when we exceed 2 intervals.
@@ -126,7 +126,8 @@ var PutByteBuffer = func(b []byte) {
// A successful call returns err == nil, not err == EOF. Because readAllInto is
// defined to read from src until EOF, it does not treat an EOF from Read
// as an error to be reported.
func readAllInto(b []byte, r *wsutil.Reader) ([]byte, error) {
func readAllInto(b []byte, r *wsutil.Reader, want int64) ([]byte, error) {
read := int64(0)
for {
if len(b) == cap(b) {
// Add more capacity (let append pick how much).
@@ -136,10 +137,18 @@ func readAllInto(b []byte, r *wsutil.Reader) ([]byte, error) {
b = b[:len(b)+n]
if err != nil {
if errors.Is(err, io.EOF) {
if want >= 0 && read+int64(n) != want {
return nil, io.ErrUnexpectedEOF
}
err = nil
}
return b, err
}
read += int64(n)
if want >= 0 && read == want {
// No need to read more...
return b, nil
}
}
}