Tomcat 8网络模型
tomcat默认使用的网络模型是怎么样子的呢?我们知道tomcat有一个或多个连接线程监听外部请求,然后连接线程将请求交给工作线程池处理
BO、NIO、AIO
NIO模型可以让一个工作线程处理多个连接
在server.xml中默认定义了
<Connector port=“8080” protocol=“HTTP/1.1”
connectionTimeout=“20000”
redirectPort=“8443” />
除此之外,还有其他protocol可供选择
protocol="org.apache.coyote.http11.Http11NioProtocol
protocol=“org.apache.coyote.http11.Http11AprProtocol”
protocol=“AJP/1.3”
if ("HTTP/1.1".equals(protocol) || protocol == null) {
if (aprConnector) {
setProtocolHandlerClassName("org.apache.coyote.http11.Http11AprProtocol");
} else {
setProtocolHandlerClassName("org.apache.coyote.http11.Http11NioProtocol");
}
} else if ("AJP/1.3".equals(protocol)) {
if (aprConnector) {
setProtocolHandlerClassName("org.apache.coyote.ajp.AjpAprProtocol");
} else {
setProtocolHandlerClassName("org.apache.coyote.ajp.AjpNioProtocol");
}
} else {
setProtocolHandlerClassName(protocol);
}
从这段代码可以看出,tomcat8默认使用org.apache.coyote.http11.Http11NioProtocol它的工作原理
在NioProtocol里面的属性中我们看出
NioSelectorPool
ServerSocketChannel
SynchronizedStack
SynchronizedStack
执行原理如下: