我正在(asyncio)Python中编写HTTP / 1.1客户端,并想知道是否应该使用SO_KEEPALIVE
选项创建套接字
import socket
sock = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=socket.IPPROTO_TCP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
应该始终启用还是禁用它?在某些情况下是否最好启用它?需要权衡吗?如果是HTTPS,答案是否不同?
我特别想参考用于多个HTTP请求(即使用HTTP Keep-Alive)的连接。
答案 0 :(得分:1)
TCP保持活动状态用于检测TCP连接的连接丢失,该TCP连接处于空闲状态(即无数据传输)的时间较长。 HTTP / 1通常不适合此用例,因此使TCP保持活动状态没有太大意义。但这也没有害处。实际上,电线上显示的内容完全没有区别。
在HTTP / 1中,客户端发送一个请求,该请求或多或少立即由服务器发出响应。而且,如果HTTP保持活动处于活动状态,则可能会跟随另一个请求,该请求再次导致响应。这些请求之间的持续时间通常很短,即保持空闲连接长时间打开并不常见。还期望客户端和服务器可以在完成请求响应之后的任何时间关闭连接,并且它们还必须能够处理从对等方关闭的连接。因此,很可能在TCP保持活动计时器触发传输空的保持活动数据包之前,已关闭连接或已传输新数据。