持久连接

持久连接(Keep Alive)又称长连接,指TCP连接中持续发送多份数据而不断开的连接。与之对应的称为短连接,就是连接后发送一次数据便断开的连接。

建立一个TCP连接需要进行三次握手(Three Way Hand Shake),TCP三次握手需要交换三个分组的数据,而交换数据需要消耗一定的时间。在允许的情况下,重新建立连接的次数越少,越有利于性能的提升。

由于HTTP具有无状态特性,因此不依赖于TCP的长连接。通常一次TCP连接只处理一个HTTP请求,请求处理完毕后马上关闭此次连接。所以,如果HTTP支持长连接,好处是显而易见的,特别对于密集型图片或者网页等小数据请求处理有明显的加速作用。HTTP 1.1 对长连接有完整的定义,同时,很多浏览器和Web服务器也纷纷提供对长连接的支持。

HTTP长连接的实施需要浏览器和Web服务器共同协助完成。一方面,浏览器需要保持一个TCP连接不能释放,并且不断地发送多个请求。另一方面,服务器不能过早地主动关闭连接。目前的浏览器普遍支持长连接,只需要在发出的HTTP请求头中包含相关的长连接声明即可,如下所示:
Connection: Keep-Alive

这个声明告诉服务器:如果可以,请让我重用这个连接。告诉服务器不要在处理完当前请求后马上关闭连接。

同时,Web服务器必须打开长连接的支持。对于Apache,长连接的配置项在 httpd-default.conf 中,开启长连接,如下:
KeepAlive On

每个长连接都需要设置一个超时时间,这个设置同时出现在Web浏览器和服务器上,所有双方都可以主动关闭长连接。Firefox默认超时时间为115秒,可通过注册表或浏览器配置修改超时间。比如,在Firefox浏览器地址栏输入:
about:config
可打开浏览器的设置页面,修改  network.http.keep-alive.timeout 参数即可。

对于Web服务器(如Apache),通常提供超时时间的配置参数,如:
KeepAliveTimeout 20

设置Apache的超时时间为20秒,默认情况下为5秒。

注意:TCP连接是双向的,任何一方都可以主动关闭连接。所以,当浏览器与Web服务器设置的超时时间不一致时,以最短的超时时间为准。

在请求大量小文件时,长连接能够有效地减少重新建立连接的开销。在启动ab压力测试工具时,加上 k 参数可以使用 KeepAlive(长连接)模式进行测试。

先不使用长连接请求一个url地址,如:
cd E:\xampp\apache\bin
ab -n10000 -c10 demo.com/image.png

这里只列出吞吐率的输出结果:
Requests per second:    2836.39 [#/sec] (mean)
可以看出,在不使用KeepAlive时,吞吐率为  2836.39reqs/s。

现在,我们使用KeepAlive模式进行测试,如:
ab -n10000 -c10 -k demo.com/image.png

这里列出部分输出结果:
Keep-Alive requests:    9906
Total transferred:      50355871 bytes
HTML transferred:       47250000 bytes
Requests per second:    4856.25 [#/sec] (mean)
可以看出,使用长连接模式时,吞吐率为  4856.25reqs/s。与之前相比,有了大幅度的提升。在此测试中,使用长连接的请求数为 9906 个,也就是说有 9906 个请求重用了TCP长连接。

注意:长连接不一定都是正效应,也可能会影响服务器的并发性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值