From 4eab0373f7726813024ac362cdf3928bb0e2ba76 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Thu, 31 May 2018 13:21:47 +0300 Subject: [PATCH 1/2] Use bytearray instead of a list of bytes in websocket reader --- aiohttp/http_websocket.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/aiohttp/http_websocket.py b/aiohttp/http_websocket.py index 155a945e76d..edc1b8dffb3 100644 --- a/aiohttp/http_websocket.py +++ b/aiohttp/http_websocket.py @@ -240,7 +240,7 @@ def __init__(self, queue, compress=True): self.queue = queue self._exc = None - self._partial = [] + self._partial = bytearray() self._state = WSParserState.READ_HEADER self._opcode = None @@ -319,7 +319,7 @@ def _feed_data(self, data): # got partial frame payload if opcode != WSMsgType.CONTINUATION: self._opcode = opcode - self._partial.append(payload) + self._partial.extend(payload) else: # previous frame was non finished # we should get continuation opcode @@ -334,15 +334,16 @@ def _feed_data(self, data): opcode = self._opcode self._opcode = None - self._partial.append(payload) - - payload_merged = b''.join(self._partial) + self._partial.extend(payload) # Decompress process must to be done after all packets # received. if compressed: + self._partial.extend(_WS_DEFLATE_TRAILING) payload_merged = self._decompressobj.decompress( - payload_merged + _WS_DEFLATE_TRAILING) + self._partial) + else: + payload_merged = bytes(self._partial) self._partial.clear() From b7acbd81eb00fa269d3d01b63646bfb0c33e9550 Mon Sep 17 00:00:00 2001 From: Andrew Svetlov Date: Thu, 31 May 2018 13:23:38 +0300 Subject: [PATCH 2/2] Add changelog --- CHANGES/3039.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 CHANGES/3039.feature diff --git a/CHANGES/3039.feature b/CHANGES/3039.feature new file mode 100644 index 00000000000..dc8a76f5ac5 --- /dev/null +++ b/CHANGES/3039.feature @@ -0,0 +1 @@ +Use ``bytearray`` instead of a list of ``bytes`` in websocket reader. It improves websocket message reading a little. \ No newline at end of file