Http keep-alive分析

之前的文章中使用Netty构建了一个Http服务器,而这个服务器中一个非常重要的设计就是如何去调整keep-alive策略。

TCP/IP协议是Internet最基本的协议,绝大数的应用层协议都是建立在TCP/IP之上的。在TCP/IP协议的网络通信中我们需要依赖IP地址端口进行端到端的通信,而Http协议追求无状态,所以在早期的Http协议中,每个Http请求都要求打开一个TCP Socket连接,并且使用一次之后就断开这个TCP连接。

HTTP的1.0版本中附加了一个Header:keep-alive,这个头信息表示连接可以被复用,也就是当第一个请求完成之后,socket连接不关闭,下一条请求继续使用这个链接。在HTTP/1.1中,默认情况下所有连接都被保持,除非在Header中指明要关闭:Connection: Close

Http keep-alive分析_第1张图片
Http 两种连接建立的方式。

keep-alive确实很高效,节约了大量时间,但是它并不是没有缺点的。我们都知道一个操作系统的能支撑的连接数是有限的,使用ulimit命令可以查看当前系统的最大连接数。

➜ ~ ulimit -n
2560

也就说当一台服务器的连接数超过这个数量,后面的网络请求就无法到达服务器了。keep-alive会让client和server之间的服务器不断开,即使它们之间没有数据传输。所以Server端需要控制好这个链接闲置的时间(timeout),一旦闲置时间超出就立即关闭这个链接。

所以对于这种长连接,在用户操作频繁的场景下是非常节约资源的。相对的,用户操作并不是特别频繁,那么短链接显然可以承担更大的并发量。

你可能感兴趣的:(Http keep-alive分析)