HTTP服务的Keep-Alive设置有关问题

HTTP服务的Keep-Alive设置问题

和apache一样,很多http服务都提供了Keep-Alive功能,如nginx配置中的keepalive_timeout。

至于什么是Keep-Alive,简单的说:

Keep-Alive会在server上保持client过来所建立的链接,当client下一次再连到这台server时,不需要重新建立链接,而继续使用之前的链接。

具体这里不再介绍,可自行google。这里直接说一下Keep-Alive该如何设置的问题。

因为它会保持打开的链接,所以适用于同一client短时间内需要反复链接的web情况,例如:

  1. 打开一个页面时,该页面链接了n个图片或n个js脚本或n个css等,并且这些东西都在一台server上;
  2. 需要用户频繁的在网站中转悠,这点点那点点;
前者可设置timeout时间短一些,例如5秒;后者可以稍长一些,例如60秒。

那么不适用Keep-Alive的情况呢?
除了以上情况的相反情况外,对于一些特殊情况也可以off了它。例如高并发情况下。
为什么?因为太多的client请求过来时,server的链接数是有限的,如果为一部分用户保持了太多的链接,那么其他用户就无法正常链接上。

所以要让通信完毕的链接尽快释放,给其他client腾出资源。

虽然这样频繁地建立链接会消耗一定的CPU和内存,但是以现在机器的性能,前端服务器的瓶颈往往不在这块儿,而在链接数和I/O等。

所以,通常情况下web服务器你大可不必开启Keep-Alive,或者设置较低的值。这样可以充分发挥机器性能,提高并发。除非你的CPU和内存比较紧张。

此外,后端server和server之间的通信如果使用的也是http,那么此时应该开启Keep-Alive,你说是么:)

-----------------------------------------我是分割线----------------------------------------------

扩展阅读:

http://blog.netzhou.net/?p=141

http://mylinux.5d6d.net/thread-919-1-1.html