为什么说Keep-Alive现在没有必要了?

keep alive通俗地讲,就是所谓的长连接。长连接节省了TCP连接过程的开销,有一定的优势。现有操作系统越来越先进,建立连接的开销越来越小,比如 linux 2.6的epoll,freebsd的kqueue,可以让程序不fork进程或开线程就能同时服务N多连接。与此同时,客户端比如IE,Firefox 却可以同时开多个线程取内容,如果开了Keep alive,反而不好。因此一般情况下不需Keep Alive


这段话听不懂,我只知道tcp有个选项叫keep alive,就是心跳包。


Keep-Alive 持续性连接,在HTTP 中,持续性连接的工作方式是服务器通过响应的Content-Length 首部告诉客户端响应体有多大。客户端能够在下载的过程中准确的显示进度条。

所以Keep-Alive 还是很有必要的。


觉得keepalive就是为长连接准备的,如果长连接设计是合理的,那么这个机制是有必要的,无论是传输层TCP的分节,还是应用层实现的消息。但是的确,TCP(SO_KEEPALIVE选项)提供的心跳跳的是慢点,大概2小时后才连续发几个探测分节。个人接触较多的还属于应用层keepalive一类。


keep-alive的主要目的是为了给服务器提供一个实时向客户端推送信息的手段(比如Gmail的新邮件到达),而不需要不停的通过客户端刷新实现,从这个角度而言,keep-alive对很多应用是必要的,尤其是交互类的。


http的keep-alive是看情况的
如果一个访问会对同一个服务器请求多次那是有用的。不然就是没用的。
比如在完全分离动态页面和静态文件的时候,跑动态页面的服务器就可以关闭keep-alive,以节省连接数。

有话要说