aio-libs / aio-libs/aiohttp

Add keepalive_time parameter to the RequestHandler, or custom logic to decide to terminate the connection.

Abierto
#7,804 5 comentarios 0 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Python
Estrellas
16.5k
Forks
2.4k
Merge medio
17 h 22 min
PR fusionados (30 d)
212

Descripción

### Is your feature request related to a problem?

In case the aiohttp app runs in multiple replicas behind the TCP-based load-balancing, it keeps the same connection pointing to the same replica, and with high keep-alive, this effectively bypasses the load-balancing. This can be solved on client-side by using short keep-alive, but we would like to have it solved on the side of server, using aiohttp.
I don't want to set `tcp_keepalive=False`, in the `RequestHandler`, because that would lead to lots of time being spent on establishing new connection.

### Describe the solution you'd like

I would like to have a new parameter, called `keepalive_time` in the `RequestHandler`, which would mimick the behavior of http://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time so it would let me terminate the connection after some time.
Or it could be based on number of requests, that there would be a parameter for max. amount of request to be allowed to be processed inside the same connection and then the connection would be closed.

### Describe alternatives you've considered

I have considered using `tcp_keepalive=False` in `RequestHandler` but that is quite drastic. I also considered overloading the https://github.com/aio-libs/aiohttp/blob/v3.8.6/aiohttp/web_protocol.py#L405-L421 `_process_keepalive` method, but because it's not meant to be public, I want to avoid abusing the internals like this.
The `tcp_keepalive` does not have anything in common with the http keep-alive.

### Related component

Server

### Additional context

We have aiohttp deployed to k8s in multiple replicas, where we have the tcp-based load-balancing and being able to handle this on the server instead of client would be great.

### Code of Conduct

- [X] I agree to follow the aio-libs Code of Conduct

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.