假设您使用(阻塞)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"
如果我们建立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个连接。
答案 0 :(得分:3)
以下是配置参数:Apache Tomcat 8 Configuration Reference 基本上是Executor,标准实现中的队列默认长度是: acceptCount = 100
最大连接数是指总共接受的连接数(在队列中和正在处理中)。 连接被拒绝,我假设基于先到达的内容。
NIO不受请求处理器线程的限制。