Connector-连接器
tomcat的连接器
功能:
1.接受连接请求
2.创建request和response对象 用于和 请求端交换数据
3.分配线程让Engine(Servlet容器)处理请求,并将request和response传给Engine.
Connector分两种:
1.Http Connector(大多情况下说的是这种)
2.AJP Connector
protocol-协议类型
Connector的协议
协议类型:
1.BIO: 阻塞的IO
2.NIO/NIO2: 非阻塞IO
3.APR: Apache可移植的运行库,可以实现高扩展和高新能,是Tomcat上运行高并发应用的首选类型,但需要安装apr, apr-utils, tomcat-native等包
不同版本的Tomcat支持的protocol不同:
1.Tomcat7: 支持BIO,NIO,APR
2.Tomcat8: 支持BIO,NIO,APR,NIO2
3.Tomcat9: 支持NIO,APR,NIO2
指定protocol
通过配置文件server.xml中元素下的protocol属性指定
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dPK9Pqwj-1640081067572)(D:\workspace\personel\study_note\tomcat\tomcat.assets\1640073961109.png)]
取值如下:
1.HTTP/1.1: 默认值,与tomcat版本有关
- Tomcat7: 自动选取BIO或APR
- Tomcat8: 自动选取NIO后APR
2.org.apache.coyote.http11.Http11Protocol: BIO
3.org.apache.coyote.http11.Http11NioProtocol: NIO
4.org.apache.coyote.http11.Http11Nio2Protocol: NIO2
5.org.apache.coyote.http11.Http11AprProtocol: APR
BIO和NIO
对于BIO和NIO, Connector处理请求的大致流程
1.客户端向服务器发送请求, 如果客户端和OS完成三次握手建立了连接, 则OS将该连接放入accept队列
2.Connector从accept队列中获取连接
3.在连接中获取请求的数据, 生成request
4.调用servlet容器处理请求
5.返回response
BIO和NIO的区别
HTTP/1.1默认keep-aliver=true, 即长连接, 长连接意味着一次请求结束后, TCP连接不会马上释放掉.
对于BIO而言: 如果TCP连接没有释放掉,那么之前分配给这个连接的线程就是一直处于被占用状态.
对于NIO而言: 如果TCP连接没有释放掉,那么之前分配给这个连接的线程不会处于占用状态.
Connector的3个参数
1.acceptCount
accept队列的长度, 默认100, 即最多有100个连接存在accept队列中
2.maxConnections
tomcat处理连接的最大值, 默认10000, 即此有10000个人同时访问了服务器(后续如果还有人连接,则会放到accept队列,知道accept队列也被放满)
3.maxThreads
处理请求的最大数量,默认200.(比如10000个连接中,同时有250人发请求,此时最多处理200人,剩下50人等线程空闲再处理(针对NIO))
所以一台tomcat服务器最大的并发量多少呢?
我得到的答案:不考虑服务器本身性能的情况下,并发量最多200(默认情况)