在事务结束之后,仍然保持在打开状态的链接称为持久连接。非持久的链接会在每个事务结束之后就会关闭。
持久连接的好处
- 避免缓慢的链接建立阶段
- 避免慢启动的拥塞适应阶段
Keep-Alive
客户端发起请求,带有Connection: Keep-Alive头。客户端在响应头中回应Connection: Keep-Alive。则说明客户端同意持久连接。
如果客户端不同意持久连接,就会在响应头中返回Connection: Close
注意事项
- 即使服务端同意了持久连接,服务端也可以随时关闭连接
- HTTP 1.0 协议,必须显式传递Connection: Keep-Alive,服务端才会激活持久连接
- HTTP 1.1 协议,默认就是持久连接
在通信双方中,主动关闭连接的一方会进入TIME_WIAT状态,而被动关闭的一方则不会进入该状态。
TIME_WAIT连接太多
服务端太多的TIME_WAIT连接,则说明连接是服务端主动去关闭的。查看了响应头,内容也是Connection: Close。
我们知道,一般情况下TIME_WAIT状态的链接至少会持续60秒。也就是说该连接占用的内存至少在60秒内不会释放。
当连接太多时,就有可能产生out of memory的问题,而操作系统就会很有可能把这个进程给kill掉,进而导致服务不可用。