Skip to content

Commit d918153

Browse files
committed
add max_payload_size param to aiohttp and fastapi backends
1 parent 1f35d2e commit d918153

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

pywebio/platform/aiohttp.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@
99

1010
from aiohttp import web
1111

12+
from . import page
1213
from .adaptor import ws as ws_adaptor
1314
from .page import make_applications, render_page
1415
from .remote_access import start_remote_access_service
1516
from .tornado import open_webbrowser_on_server_started
1617
from .utils import cdn_validation, print_listen_address
1718
from ..session import register_session_implement_for_target, Session
1819
from ..session.base import get_session_info_from_headers
19-
from ..utils import get_free_port, STATIC_PATH
20+
from ..utils import get_free_port, STATIC_PATH, parse_file_size
2021

2122
logger = logging.getLogger(__name__)
2223

@@ -125,7 +126,7 @@ async def wshandle(request: web.Request):
125126

126127

127128
def webio_handler(applications, cdn=True, reconnect_timeout=0, allowed_origins=None, check_origin=None,
128-
websocket_settings=None):
129+
max_payload_size='200M', websocket_settings=None):
129130
"""Get the `Request Handler <https://docs.aiohttp.org/en/stable/web_quickstart.html#aiohttp-web-handler>`_ coroutine for running PyWebIO applications in aiohttp.
130131
The handler communicates with the browser by WebSocket protocol.
131132
@@ -139,6 +140,9 @@ def webio_handler(applications, cdn=True, reconnect_timeout=0, allowed_origins=N
139140

140141
websocket_settings = websocket_settings or {}
141142

143+
page.MAX_PAYLOAD_SIZE = max_payload_size = parse_file_size(max_payload_size)
144+
websocket_settings.setdefault('max_msg_size', max_payload_size)
145+
142146
cdn = cdn_validation(cdn, 'error')
143147

144148
if check_origin is None:
@@ -170,10 +174,12 @@ def start_server(applications, port=0, host='', debug=False,
170174
reconnect_timeout=0,
171175
allowed_origins=None, check_origin=None,
172176
auto_open_webbrowser=False,
177+
max_payload_size='200M',
173178
websocket_settings=None,
174179
**aiohttp_settings):
175180
"""Start a aiohttp server to provide the PyWebIO application as a web service.
176181
182+
177183
:param dict websocket_settings: The parameters passed to the constructor of ``aiohttp.web.WebSocketResponse``.
178184
For details, please refer: https://docs.aiohttp.org/en/stable/web_reference.html#websocketresponse
179185
:param aiohttp_settings: Additional keyword arguments passed to the constructor of ``aiohttp.web.Application``.
@@ -192,7 +198,8 @@ def start_server(applications, port=0, host='', debug=False,
192198
cdn = cdn_validation(cdn, 'warn')
193199

194200
handler = webio_handler(applications, cdn=cdn, allowed_origins=allowed_origins, reconnect_timeout=reconnect_timeout,
195-
check_origin=check_origin, websocket_settings=websocket_settings)
201+
check_origin=check_origin, max_payload_size=max_payload_size,
202+
websocket_settings=websocket_settings)
196203

197204
app = web.Application(**aiohttp_settings)
198205
app.router.add_routes([web.get('/', handler)])

pywebio/platform/fastapi.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212
from starlette.websockets import WebSocket, WebSocketState
1313
from starlette.websockets import WebSocketDisconnect
1414

15+
from . import page
1516
from .page import make_applications, render_page
1617
from .remote_access import start_remote_access_service
1718
from .tornado import open_webbrowser_on_server_started
1819
from .utils import cdn_validation, OriginChecker, print_listen_address
1920
from ..session import register_session_implement_for_target, Session
2021
from ..session.base import get_session_info_from_headers
21-
from ..utils import get_free_port, STATIC_PATH, strip_space
22+
from ..utils import get_free_port, STATIC_PATH, strip_space, parse_file_size
2223

2324
logger = logging.getLogger(__name__)
2425
from .adaptor import ws as ws_adaptor
@@ -148,6 +149,7 @@ def start_server(applications, port=0, host='', cdn=True, reconnect_timeout=0,
148149
static_dir=None, remote_access=False, debug=False,
149150
allowed_origins=None, check_origin=None,
150151
auto_open_webbrowser=False,
152+
max_payload_size='200M',
151153
**uvicorn_settings):
152154
"""Start a FastAPI/Starlette server using uvicorn to provide the PyWebIO application as a web service.
153155
@@ -178,6 +180,10 @@ def start_server(applications, port=0, host='', cdn=True, reconnect_timeout=0,
178180
if remote_access:
179181
start_remote_access_service(local_port=port)
180182

183+
page.MAX_PAYLOAD_SIZE = max_payload_size = parse_file_size(max_payload_size)
184+
uvicorn_settings = uvicorn_settings or {}
185+
uvicorn_settings.setdefault('ws_max_size', max_payload_size)
186+
181187
uvicorn.run(app, host=host, port=port, **uvicorn_settings)
182188

183189

0 commit comments

Comments
 (0)