持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天
持久连接 和 管线化
持久连接,英文是persistent connection,指不必为每个request object(例如很小的gif广告图像)的传送建立一个新的TCP(socket)连接,减少TCP建立时间和相应的系统损耗。
什么是持久连接?在事务处理结束之后仍然保持在打开状态的TCP连接被成为持久连接。非持久连接会在每个事务结束之后关闭,持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。重用持久连接,就可以避开缓慢的连接建立阶段。而且已经打开的连接还可以避免慢启动的拥挤适应阶段,以便更快地进行数据的传输。
可是这样**会造成网络使用效率的降低**,为什么呢?有这么几点原因:
-
- 每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
-
- 使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快咯。
-
- 每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前提下。
现在很多方案都会采用**
持久连接+新连接结合**的方式,这种方式尽可能的减少了新建连接的浪费,同时当现有连接没有办法满足需求的时候,可以建立新连接满足需求,比较灵活。现有的持久连接类型有两种:
HTTP/1.0+的keep-alive和HTTP/1.1的persistent
keep-alive