之前的文章中使用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
keep-alive确实很高效,节约了大量时间,但是它并不是没有缺点的。我们都知道一个操作系统的能支撑的连接数是有限的,使用ulimit
命令可以查看当前系统的最大连接数。
➜ ~ ulimit -n
2560
也就说当一台服务器的连接数超过这个数量,后面的网络请求就无法到达服务器了。keep-alive会让client和server之间的服务器不断开,即使它们之间没有数据传输。所以Server端需要控制好这个链接闲置的时间(timeout),一旦闲置时间超出就立即关闭这个链接。
所以对于这种长连接,在用户操作频繁的场景下是非常节约资源的。相对的,用户操作并不是特别频繁,那么短链接显然可以承担更大的并发量。