@@ -105,3 +105,67 @@ async def run_websocket_benchmark() -> None:
105
105
@benchmark
106
106
def _run () -> None :
107
107
loop .run_until_complete (run_websocket_benchmark ())
108
+
109
+
110
+ def test_client_send_large_websocket_compressed_messages (
111
+ loop : asyncio .AbstractEventLoop ,
112
+ aiohttp_client : AiohttpClient ,
113
+ benchmark : BenchmarkFixture ,
114
+ ) -> None :
115
+ """Benchmark send of compressed WebSocket binary messages."""
116
+ message_count = 10
117
+ raw_message = b"x" * 2 ** 19 # 512 KiB
118
+
119
+ async def handler (request : web .Request ) -> web .WebSocketResponse :
120
+ ws = web .WebSocketResponse ()
121
+ await ws .prepare (request )
122
+ for _ in range (message_count ):
123
+ await ws .receive ()
124
+ await ws .close ()
125
+ return ws
126
+
127
+ app = web .Application ()
128
+ app .router .add_route ("GET" , "/" , handler )
129
+
130
+ async def run_websocket_benchmark () -> None :
131
+ client = await aiohttp_client (app )
132
+ resp = await client .ws_connect ("/" , compress = 15 )
133
+ for _ in range (message_count ):
134
+ await resp .send_bytes (raw_message )
135
+ await resp .close ()
136
+
137
+ @benchmark
138
+ def _run () -> None :
139
+ loop .run_until_complete (run_websocket_benchmark ())
140
+
141
+
142
+ def test_client_receive_large_websocket_compressed_messages (
143
+ loop : asyncio .AbstractEventLoop ,
144
+ aiohttp_client : AiohttpClient ,
145
+ benchmark : BenchmarkFixture ,
146
+ ) -> None :
147
+ """Benchmark receive of compressed WebSocket binary messages."""
148
+ message_count = 10
149
+ raw_message = b"x" * 2 ** 19 # 512 KiB
150
+
151
+ async def handler (request : web .Request ) -> web .WebSocketResponse :
152
+ ws = web .WebSocketResponse ()
153
+ await ws .prepare (request )
154
+ for _ in range (message_count ):
155
+ await ws .send_bytes (raw_message )
156
+ await ws .close ()
157
+ return ws
158
+
159
+ app = web .Application ()
160
+ app .router .add_route ("GET" , "/" , handler )
161
+
162
+ async def run_websocket_benchmark () -> None :
163
+ client = await aiohttp_client (app )
164
+ resp = await client .ws_connect ("/" , compress = 15 )
165
+ for _ in range (message_count ):
166
+ await resp .receive ()
167
+ await resp .close ()
168
+
169
+ @benchmark
170
+ def _run () -> None :
171
+ loop .run_until_complete (run_websocket_benchmark ())
0 commit comments