aio-libs / aio-libs/aiohttp

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

Đang mở
#2,310 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
enhancement
Ngôn ngữ chính
Python
Star
16.5k
Fork
2.4k
Merge trung bình
17 giờ 22 phút
Pull request đã merge (30 ngày)
212

Mô tả

## 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.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.