Description
Long story short
This is more of a question. Is this behaviour by design?
We have to timeout-related parameters on WebSocketResponse:
timeout
receive_timeout
The receive_timeout
works for all receive operations. Consequently, I assumed that the timeout
parameter worked for all send operations. Apparently, I was mistaken. The documentation is not so clear about this.
From the look of the implementation, timeout
is actually only used in the close()
call.
Expected/Actual behaviour
I expected that the timeout
parameter applied to the send_bytes
/send_json
/send_str
calls. It does not.
Discussion
Currently, I simply wrap my send_x
calls in with Timeout(...)
. It's not that much effort but it would be nice to see this directly implemented in aiohttp.
I can see two options:
- Let
timeout
parameter apply to thesend_x
calls - Add a
send_timeout
parameter to the WebSocketResponse that applied a timeout to thesend_x
calls
This also relates to #2309. In my actual implementation, the send_x
calls are submitted to the event loop in a fire-and-forget fashion. Consequently, if the connection is abruptly cut, said send_x
calls are left lingering and never cancelled. By using a timeout, said calls will time out and not fill up in memory.
Your environment
Aiohttp 2.2.3 and Python 3.6.1.