diff --git a/releases.txt b/releases.txt index 2fda06c..1d1aaa1 100644 --- a/releases.txt +++ b/releases.txt @@ -32,3 +32,6 @@ - Add deny_new_connections & allow_new_connections - Fix disconnect_clients_gracefully to now take params - Fix shutdown_gracefully unused param + +0.6.5 +- Speed up read_next_message diff --git a/setup.py b/setup.py index 684b88d..02ab047 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ from distutils.command.install import install -VERSION = '0.6.4' +VERSION = '0.6.5' def get_tag_version(): diff --git a/websocket_server/websocket_server.py b/websocket_server/websocket_server.py index 083ee17..a2e10dd 100644 --- a/websocket_server/websocket_server.py +++ b/websocket_server/websocket_server.py @@ -1,6 +1,7 @@ # Author: Johan Hanssen Seferidis # License: MIT +from itertools import cycle import sys import struct import ssl @@ -334,10 +335,8 @@ def read_next_message(self): payload_length = struct.unpack(">Q", self.rfile.read(8))[0] masks = self.read_bytes(4) - message_bytes = bytearray() - for message_byte in self.read_bytes(payload_length): - message_byte ^= masks[len(message_bytes) % 4] - message_bytes.append(message_byte) + payload = self.read_bytes(payload_length) + message_bytes = bytearray([byte ^ mask for byte, mask in zip(payload, cycle(masks))]) opcode_handler(self, message_bytes.decode('utf8')) def send_message(self, message):