keep-alive模式

TCP的keep-alive

​ TCP内部自带的心跳包机制,简单讲就是,连接的一端(以服务器端举例)检测到超过一定时间(称为空闲时间,系统默认是 7200000 ms,即2个小时)没有数据传输,就会向client端发送一个keep-alive packet(该心跳包是ACK和当前TCP序列号减一的组合),如果收到client的响应,则重置计时器(即2小时重新计时),否则会每隔一定时间(通常默认是75s),重复尝试发送心跳包(通常默认是9次),如果一直没有收到client的响应,则终止此链接(release掉占用的资源)。

HTTP的Keep-Alive模式?

​ http一般是短连接,即一次请求结束后关闭连接,但如果有多个资源要请求(比如连续10张图片)中间连接建立和断开的开销就浪费了,因此可以通过keep-alive模式,将这个http连接通道保持一段时间。

​ http响应头中有一个Connection: Keep-Alive表示开启Keep-Alive模式。在HTTP 1.1版本后,默认都开启Keep-Alive模式,只有Connection: close才关闭。当然也可以设置Keep-Alive模式的属性,例如 Keep-Alive: timeout=5, max=100,表示这个TCP通道可以保持5秒,max=100,表示这个长连接最多接收100次请求就断开。

Keep-Alive模式下如何知道某一次数据传输结束?:1. 根据响应头中的Content-Length字段。 2. 服务端关闭后,客户端一般是分块(chunk)读的,因此读取到的最后的一个数据块chunk的长度是0。

posted @ 2021-04-20 20:40  i%2  阅读(187)  评论(0)    收藏  举报