tomcat服务器解析(七)-- Processor&Endpoint&ProtocolHandler
来源:互联网 发布:js解析xml字符串 编辑:程序博客网 时间:2024/05/17 01:13
请求到达Poller处理,最终是由Processor来进行处理,为了说明这中间过程所涉及的部分,先整理下在tomcat服务的各个组成部分:ProtocolHandler、Endpoint、Endpoint.Handler、Processor
它们之间的引用关系如下
[ProtocolHandler] <--------- Connector
org.apache.coyote.ProtocolHandler
org.apache.coyote.AbstractProtocol
org.apache.coyote.http11.AbstractHttp11Protocol
org.apache.coyote.http11.AbstractHttp11JsseProtocol
org.apache.coyote.http11.Http11NioProtocol *
[Endpoint] <--------- ProtocolHandler(Http11NioProtocol)
org.apache.tomcat.util.net.AbstractEndpoint
org.apache.tomcat.util.net.NioEndpoint *
处理连接数的控制、连接的建立等工作,主要包括Acceptor和Poller两大部分,将建立好的连接交由Endpoint的Handler去处理
[Endpoint.Handler] <--------- Endpoint(NioEndpoint)
AbstractEndpoint.Handler
AbstractConnectionHandler < -- > AbstractProtocol
Http11ConnectionHandler < -- > Http11NioProtocol *
缓存连接和Processor的关系,根据连接寻找Processor来处理
[Processor] <--------- Endpoint.Handler
org.apache.coyote.AbstractProcessor
org.apache.coyote.http11.AbstractHttp11Processor
org.apache.coyote.http11.Http11NioProcessor *
(process方法)处理http请求中的相关业务,服务状态,协议解析,请求握手,内容解压等,构造适合Adapter处理request和response对象,然后调用Adater进行业务数据处理。
Acceptor和Poller都是属于Endpoint的内部组成部分,所以,这里是socket连接有数据到达时,被交到Endpoint.Handler中,经过缓存加速,找到对应的Processor之后,交由Processor来处理。
Processor处理完http协议相关的内容后,交由Adapter来处理业务。
Q&A
1、在什么时候读取请求数据?
Java Servlet开发模型中,由开发者自定义的servlet来通过InputStream读取数据,通过OutputStream写入数据。所以,以上的这些部分,都不涉及到具体业务数据的读写。具体的数据读写时机,在Adapter之后。
2、请求如何被转到用户自定义的Servlet上的?
具体的实现,在Adapter之后的部分,这里并不涉及与此相关的部分。
3、服务的连接数是如何控制的?
Endpoint内部的Acceptor来控制,Endpoint提供了setMaxConnection方法来设置tomcat所能支持的最大连接数。此方法会设置一个Acceptor用的一个LimitLatch锁。通过LimitLatch来控制连接的数量。当有新连接加入时,会增加计算器;连接关闭时,会将计数器减一。
4、tomcat服务内在哪个地方使用了线程池?
Endpoint内部的Poller用来选出有数据到达的socket连接,并将连接交给Endpoint.Handler来进行处理。这个传递事件被封装成了一个SocketProcessor任务,通过执行SocketProcessor任务来完成。
SocketProcessor的执行时再线程池中实现的,也就是Endpoint的Poller线程,将事件转成SocketProcessor任务后,放在Endpoint的ThreadPool中完成。
5、启动tomcat服务时,可以通过配置文件传递很多参数,包括port、protocol、maxConnections、maxThreads是如何生效的?
Sorry, I don't know. I haven't reached that point !
6、What's the point of this series passages ?
For now, It doesn't make any sense. And I don't know why I had started reading, or will I continue ... ...
0 0
- tomcat服务器解析(七)-- Processor&Endpoint&ProtocolHandler
- tomcat服务器解析(二) --- Endpoint
- tomcat服务器解析(二) --- Endpoint
- tomcat服务器解析(三)---- Handler for Endpoint
- Tomcat 源码阅读(五)解析请求ProtocolHandler
- tomcat服务器解析(一)
- Tomcat Session管理机制(Tomcat源码解析七)
- Tomcat Session管理机制(Tomcat源码解析七)
- (七)Tomcat源码解析 - Servlet 工作原理解析
- tomcat服务器解析(五)-- Poller
- tomcat服务器解析(六)-- Acceptor
- tomcat源码解析(七):server和service
- Tomcat 严重:Error initializing endpoint
- tomcat原理解析(七):执行servlet
- Json解析实例Tomcat服务器
- Json解析实例Tomcat服务器
- tomcat服务器解析(四) ---- 组成模块分解
- 在MyEclipse中运行tomcat出现Error initializing endpoint 错误(8080端口被占用问题)
- linux内核SPI总线驱动分析(二)
- 提交游戏到AppStore被打回
- ReactiveCocoa & MVVM 学习总结二
- BS CS的区别
- 551C(codeforce)
- tomcat服务器解析(七)-- Processor&Endpoint&ProtocolHandler
- C++12.1.3 类定义----typedef同义词、成员函数重载、指明inline
- 归并排序的实现
- 在没有安装office2010的64位系统上C#读取excel内容出现 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the loca
- leetcode--ValidateBinarySearchTree
- MDaemon空间不足如何搬家
- Qt学习笔记003 2015/6/17
- nim和面向对象(一)
- 通配符掩码的应用 ACL 访问控制列表