HTTP1.1 连接持久性(长连接)
在提出持久连接之前,每获取一个URL都有创建一个单独的TCP连接,不断的加重HTTP服务器的负担并导致网络的拥塞。使用内联的图片或者相关数据常常使得客户端在很短时间内发送众多的请求。
持久HTTP连接具有一下优势:
l 通过打卡和关闭更少的TCP连接,节省了路由和主机的CPU耗时,以及TCP协议控制阻塞使用的主机内存。
l HTTP请求和响应可以在一个连接的基础上管道化。管道技术允许客户端发送多个请求而不用等待响应,使得TCP连接更加高效地使用从而更少的浪费时间。
l 通过减少TCP打开导致的包的消息来减少网络拥塞,通过给TCP充分的时间来确定网络的拥塞状态。
l HTTP可以进化的更加优美,因为错误可以被报告而不用直接关闭TCP连接。使用高HTTP版本的客户端可能尝试一些新的功能,但是如果与旧版本服务端通信时在有错误报告后用要重试旧的语义。
Java 实现HTTP1.1 连接持久性(长连接)
1. 客户端发送HTTP包时,要在HTTP 的header中 设置Connection=Keep-Alive
client用apache的commons-httpclient来执行method 。
用 method.setRequestHeader("Connection" , "Keep-Alive" or "close") 来控制是否保持连接。
2. 服务器要配置支持连接持久性,常用的apache、resin、tomcat等都有相关的配置是否支持keep-alive。
tomcat中可以设置:maxKeepAliveRequests
在一篇论文中看见一个测试结果,仅供大家参考:
能够配置HTTP1.1消息头的connection属性为keep-alive,当配置为keep-alive时,每秒交互
能够达到360次以上,假如使用close方式,每秒交互大约200次以上,达到了预期的要求。