HTTP / 1.1客户端:如何确定良好的保持活动超时默认值?

时间:2019-05-30 07:18:21

标签: python-3.x sockets http tcp python-asyncio

我正在编写一个HTTP / 1.1客户端,它将用于各种服务器。

我如何确定合理的默认keep-alive超时值,例如,客户端在关闭前应将未使用的连接保持打开状态多长时间?我想到的任何值似乎都非常武断。

1 个答案:

答案 0 :(得分:1)

首先请注意,使用HTTP保持活动状态,客户端和服务器都可以随时关闭空闲连接(即,没有未完成的响应,没有未完成的请求)。特别是这意味着客户端无法通过强制执行某些超时来使服务器保持打开状态,客户端超时所做的全部工作就是限制客户端尝试保持连接打开状态的时间。服务器甚至可能在达到此客户端超时之前就关闭连接。

基于此,没有通用的超时值,但实际上不必是一个值。超时本质上用于限制资源,即同时打开多少空闲连接。如果您的特定用例永远不会再访问同一站点,那么使用HTTP保持活动状态只会浪费资源。相反,如果您不知道自己的特定使用模式,则可以对打开的连接数进行限制,即,如果达到限制并需要新的连接,则关闭最长的未使用连接。无论如何,都应将上限超时设置为10..15分钟,因为通常在此时间之后,介于两者之间的防火墙和NAT路由器将放弃连接状态,因此空闲连接无论如何将不再对新请求起作用。

但是无论如何,您还需要确保检测到服务器是否关闭了连接,然后从可重用连接列表中丢弃了该连接。而且,如果您使用HTTP保持活动状态,则还需要注意,在尝试通过现有连接发送新请求的那一刻,服务器可能会关闭连接,即,您需要在创建新连接后重试该请求。连接。