Skip to content

Commit 7a94b0a

Browse files
committed
Avoid unnecessary yield if buffer has not fully accumulated yet
This reduces the number of yields from WebSocket to the stream parser by accumulating self.reading_buffer_size worth of bytes before yielding.
1 parent 0714fb2 commit 7a94b0a

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

ws4py/websocket.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -387,12 +387,19 @@ def once(self):
387387
logger.debug("WebSocket is already terminated")
388388
return False
389389
try:
390-
if not self.buf:
391-
b = self.sock.recv(self.reading_buffer_size)
390+
wanted = self.reading_buffer_size - len(self.buf)
391+
392+
if wanted > 0:
393+
b = self.sock.recv(wanted)
394+
392395
if self._is_secure:
393396
b += self._get_from_pending()
394-
if not b:
397+
398+
if not b: # 0-length read. flush buffer and exit
399+
if self.buf:
400+
self.process(self.buf)
395401
return False
402+
396403
self.buf += b
397404
except (socket.error, OSError, pyOpenSSLError) as e:
398405
if hasattr(e, "errno") and e.errno == errno.EINTR:

0 commit comments

Comments
 (0)