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.Processor
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