diff --git a/alltests.py b/alltests.py index 2997f44..78d392c 100644 --- a/alltests.py +++ b/alltests.py @@ -21,7 +21,8 @@ port=HTTP_PORT, debug=False, reload=True, - client_max_body_size=73728)) + client_max_body_size=73728, + ws_max_payload_size=73728)) ) processes.append(mp.Process( target=tremolo.run, diff --git a/setup.py b/setup.py index 2ff94c8..6327a89 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup( name='tremolo', - version='0.0.312', + version='0.0.313', license='MIT', author='nggit', author_email='contact@anggit.com', diff --git a/tests/http_server.py b/tests/http_server.py index d0c78be..f9717ce 100644 --- a/tests/http_server.py +++ b/tests/http_server.py @@ -310,6 +310,6 @@ async def reload(request=None, **_): if __name__ == '__main__': app.run(HTTP_HOST, port=HTTP_PORT, debug=True, reload=True, - client_max_body_size=73728) + client_max_body_size=73728, ws_max_payload_size=73728) # END diff --git a/tests/test_http_client.py b/tests/test_http_client.py index bebdd34..f3178f0 100644 --- a/tests/test_http_client.py +++ b/tests/test_http_client.py @@ -821,7 +821,8 @@ def test_reload(self): port=HTTP_PORT, debug=False, reload=True, - client_max_body_size=73728) + client_max_body_size=73728, + ws_max_payload_size=73728) ) p.start() diff --git a/tremolo/__init__.py b/tremolo/__init__.py index 1ea4ab5..88ce048 100644 --- a/tremolo/__init__.py +++ b/tremolo/__init__.py @@ -1,4 +1,4 @@ -__version__ = '0.0.312' +__version__ = '0.0.313' from .tremolo import Tremolo # noqa: E402 from . import exceptions # noqa: E402,F401 diff --git a/tremolo/__main__.py b/tremolo/__main__.py index 1e283fe..e76342c 100644 --- a/tremolo/__main__.py +++ b/tremolo/__main__.py @@ -37,6 +37,8 @@ print(' --reload Enable auto reload on code changes') print(' Intended for development') print(' --no-ws Disable built-in WebSocket support') + print(' --ws-max-payload-size Maximum payload size for the built-in WebSocket') # noqa: E501 + print(' Defaults to 2 * 1048576, or 2MiB') print(' --log-level Defaults to "DEBUG". See') print(' https://docs.python.org/3/library/logging.html#levels') # noqa: E501 print(' --download-rate Limits the sending speed to the client') # noqa: E501 @@ -77,6 +79,7 @@ '--download-rate', '--upload-rate', '--buffer-size', + '--ws-max-payload-size', '--client-max-body-size', '--client-max-header-size', '--max-queue-size', diff --git a/tremolo/asgi_server.py b/tremolo/asgi_server.py index c46e4f7..8e86e03 100644 --- a/tremolo/asgi_server.py +++ b/tremolo/asgi_server.py @@ -255,7 +255,9 @@ async def send(self, data): ) if 'more_body' not in data or data['more_body'] is False: - await self.response.write(b'', throttle=False) + await self.response.write( + b'', chunked=self._http_chunked, throttle=False + ) self.response.close(keepalive=True) self._read = None diff --git a/tremolo/lib/websocket.py b/tremolo/lib/websocket.py index 49fa74e..34aeb66 100644 --- a/tremolo/lib/websocket.py +++ b/tremolo/lib/websocket.py @@ -46,11 +46,11 @@ async def recv(self): payload_length = int.from_bytes(await self.request.recv(8), byteorder='big') - if payload_length > self.protocol.options['client_max_body_size']: + if payload_length > self.protocol.options['ws_max_payload_size']: raise WebSocketServerClosed( '%d exceeds maximum payload size (%d)' % ( payload_length, - self.protocol.options['client_max_body_size']), + self.protocol.options['ws_max_payload_size']), code=1009 ) diff --git a/tremolo/tremolo.py b/tremolo/tremolo.py index e6689cd..b395b9e 100644 --- a/tremolo/tremolo.py +++ b/tremolo/tremolo.py @@ -335,6 +335,9 @@ async def _serve(self, host, port, **options): worker=context, debug=options.get('debug', False), ws=options.get('ws', True), + ws_max_payload_size=options.get( + 'ws_max_payload_size', 2 * 1048576 + ), download_rate=options.get('download_rate', 1048576), upload_rate=options.get('upload_rate', 1048576), buffer_size=options.get('buffer_size', 16 * 1024),