aio-libs / aio-libs/aiohttp

WebSocketResponse's timeout does not apply to send_bytes/send_json/send_str calls.

未关闭
#2,310 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
enhancement
主要语言
Python
星标
16.5k
派生
2.4k
平均合并
17 小时 22 分钟
30 天内合并 PR
212

描述

## 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 the `send_x` calls
* Add a `send_timeout` parameter to the WebSocketResponse that applied a timeout to the `send_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.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。