要明白HTTP长连接,得先明白Socket连接什么是Socket?百度一下,根本看不懂要理解Socket,得先理解TCP
TCP是传输层协议,有linux、windows等操作系统实现
Socket是对TCP协议抽象出来的上层接口,供操作系统上层的应用程序使用上层应用程序来使用socket,比如Tomcat、比如浏览器
浏览器在发送一个请求时,先得建立一个Socket,比如:
Socket socket = new Socket("localhost", 8081);
建立完Socket连接之后,浏览器开始构造数据,通过OutputStream发送出去。
这里涉及到Socket服务端的几个问题。
如果服务端Socket没有使用InputSteam来接收数据,那么数据存在哪了。
对于服务端Socket,有一个recvbuf来存储数据
所以JAVA中,在利用InputSteam去read数据时,是从recvbuf来读取数据的,演示一下read方法:
当从recvbuf得到的数据是字节,所以需要去解析数据。
比如Tomcat从Socket得到数据之后,就需要解析数据,那么怎么解析呢?
解析数据,解析请求行,请求头解析完数据之后,接下来该如何?
这里就是所谓的长连接和短连接。
比如Tomcat解析完某个HTTP请求,并调用了Servlet之后,就会判断是否需要关闭Socket。
那该如何判断呢?
maxKeepAliveRequests:一个socket连接所能处理的request个数,达到了上限则关闭,默认为100keepAliveTimeout:Tomcat会不停的从socket中读取数据,如果在指定的keepAliveTimeout时间内没有读到数据,则关闭该socket,默认为20smaxConnections:Tomcat的并发控制,同时只支持maxConnections个socket,bio默认为200.