假设你使用这样的(阻塞)BIO连接器:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11Protocol" connectionTimeout="20000" redirectPort="8443" maxConnections="1000" maxThreads="200" />
并且你进行201个并发连接,最后一次连接会发生什么?
如果您进行1001并发连接,那么最后一次连接会发生什么?
接下来让我们使用(非阻塞)NIO连接器 protocol="org.apache.coyote.http11.Http11NioProtocol"
如果我们 Build 201和1001并发连接会有什么不同吗?
据我所知,NIO和NIO2之间没有行为差异,只有实现不同,这是真的吗?
当没有可用的APR /本机连接器时,Tomcat 8使用什么连接器与默认协议设置 protocol="HTTP/1.1"
?
-------------编辑---------------
我做了一个像这样的小servlet:
Thread.sleep(2000);
response.getWriter().write("ok");
设置这些设置 connectionTimeout="20000"
maxConnections="10"
maxThreads="2"
并发出50个并发请求 . 所有都将被接受,然后一次执行2(执行线程完成时) . 即使 connectionTimeout="20000"
和 maxConnections="10"
,非请求超时或出错 .
protocol="org.apache.coyote.http11.Http11NioProtocol"
和 protocol="org.apache.coyote.http11.Http11Protocol"
完全相同 . 我想差异显示你有 Keep-Alive
连接 . BIO会在整个连接期间阻塞一个线程,NIO会在每次请求后释放线程 .
当我测试相同的场景但添加了参数 acceptCount="15"
时,Dennis R指出,只有这时大多数请求都返回 org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8080 refused
.
---------- edit2 -----------
请注意,如果我将此设置为 maxConnections="100"
acceptCount="15"
,则接受所有50个连接 .
1 回答
以下是配置参数:Apache Tomcat 8 Configuration Reference基本上有Executor,标准实现中的队列默认长度为:acceptCount = 100
最大连接数是指总共接受的连接数(在队列中和正在处理中) . 连接被拒绝,我假设基于先到达的内容 .
NIO不受请求处理器线程的限制 .
这里好summary/comparison