Tomcat7.0.42源码研读之网络连接器Connector(三)
来源:互联网 发布:淘宝客服服务流程图 编辑:程序博客网 时间:2024/05/01 18:59
Tomcat中Connector代表了网络连接器,连接器支持HTTP、AJP协议,还支持多种I/O方式:BIO、NIO、APR。一个Connector应该要做到这几个功能:
1、监听服务器端口,获取来自客户端的请求
2、将请求数据按照指定协议进行解析
3、根据请求地址寻找合适的容器处理
4、将服务端响应返回给客户端
基于此,Tomcat给出的设计方案如下:
其中,ProtocolHandler代表了一个协议处理器,它还包含了一个Endpoint用来启动一个Socket监听。在Connector启动时,根据conf/server.xml文件配置的Connector来启动相应的Endpoint来监听服务器端口,并在接收到来自客户端的请求后调用Processor进行数据读取。当Processor读取完客户端请求数据,需要按照请求地址映射到具体容器进行处理,这个过程即为请求映射。Tomcat是通过Mapper和MapperListener两个类来做映射处理的。
Tomcat是通过适配器模式完成了Connector和Mapper、Container容器的解耦,到此Tomcat整体设计如下:
Tomcat可以在conf/server.xml配置文件中对Connector组件的参数进行设置,配置得当可以做到性能调优:
属性说明maxThreadsTomcat是一款多线程的服务器,每个请求都会分配一个线程进行处理。maxThreads用于指定Connector创建的请求处理线程的最大值。该属性决定了Tomcat可以并发处理的上限,当并发请求数超过这个值的时候,多余的请求只能排队等待maxSpareThreadsTomcat允许的最大空闲线程数目,超出的空闲线程将被直接关闭minSpareThreadsTomcat允许的最小空闲线程数目,也是启动Connector时创建的线程数目,如果空闲线程数小于该值,Tomcat将创建新的线程TcpNoDelay对应TCP的TCP_NO_DELAY选项backlog也可以配置acceptCount参数,这两个参数最终都会被Tomcat映射成backlog参数,文章后面重点讲解下ServerSocket的这个backlog参数maxConnections作用跟maxThreads相同acceptorThreadCount这个参数决定了Tomcat会启动多少个线程用来accept socket请求,默认为1connectionTimeoutTomcat将其映射到Socket的SO_TIMEOUT参数,代表Socket在堵塞读写时,两个TCP包到来的最大间隔时间
重点知识讲解:
backlog参数Tomcat会启动一个acceptor线程来进行ServerSocket的accept socket操作,然后交由工作线程池来进行具体的业务处理。对于客户端的一个请求进来,详细流程是这样的:tcp的三次握手建立连接,建立连接的过程中,操作系统维护了半连接队列(syn队列)以及完全连接队列(accept队列),在第三次握手之后,Tomcat收到了来自客户端的ack消息,随后进入establish的状态,然后该TCP连接由syn队列移到accept队列。Tomcat的acceptor线程则负责从accept队列中取出该TCP连接,接受该Socket,然后交给工作线程去处理,然后Tomcat自己接着去accept队列取socket(当
当前Tomcat工作线程池处理的socket连接超过maxConnections的时候,acceptor线程自己会阻塞等待,等连接降下去之后,才去处理TCP accept队列的下一个连接
)。backlog指的就是这个accept队列的大小 关键代码片段如下:
阅读全文
0 0
- Tomcat7.0.42源码研读之网络连接器Connector(三)
- Tomcat7.0.42源码研读之网络框架Coyote(六)
- Tomcat7.0.42源码研读之BIO(七)
- Tomcat7-Connector(连接器)学习
- Tomcat7.0.42源码研读之组件生命周期Lifecycle(一)
- Tomcat7.0.42源码研读之组件说明(四)
- Tomcat7.0.42源码研读之Session管理(八)
- TOMCAT内核之旅--连接器(Connector)--学习心得(三)
- Tomcat源码分析--Connector(连接器)
- Tomcat7.0.42源码研读之职责链模式Pipeline与Valve(二)
- Tomcat7.0.42源码研读之类加载器(五)
- 探究tomcat7源码的connector
- Tomcat -- 源码分析No2(连接器Connector)
- hadoop源码研读之路(三)----序列化
- hadoop源码研读之路(三)----序列化
- Tomcat源码阅读系列(四)Connector连接器
- pomelo源码分析(4)--connector之网络监听
- tomcat源码(三) Connector
- 【区间DP】POJ3280[Cheapest Palindrome]题解
- 001 如何使Dialog有最小最大化按钮?
- js实现数组去重4种方法总结
- Java(Android)注解学习摘记
- Linux重定向和管道
- Tomcat7.0.42源码研读之网络连接器Connector(三)
- vue element iframe 自适应窗口大小
- 拉格朗日插值 C++ 和 Matlab实现
- 21. Merge Two Sorted Lists
- 点击后的cell为自定义颜色
- 数据结构-堆小结
- 002 如何保持插入光标处在末尾?
- XML入门
- 【喜讯】广源兴荣膺“国家级高新技术企业称号”