首页 文章

Tomcat连接器如何工作?

提问于
浏览
1

假设你使用这样的(阻塞)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 回答

  • 3

    以下是配置参数:Apache Tomcat 8 Configuration Reference基本上有Executor,标准实现中的队列默认长度为:acceptCount = 100

    最大连接数是指总共接受的连接数(在队列中和正在处理中) . 连接被拒绝,我假设基于先到达的内容 .

    NIO不受请求处理器线程的限制 .

    这里好summary/comparison

相关问题