首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

2013-07-01 
Tomcat源码解读--代码走读之JIoEndpoint$SocketProcessor.run(四十八)? ? 这部分是线程池里某一个线程的执

Tomcat源码解读--代码走读之JIoEndpoint$SocketProcessor.run(四十八)

? ? 这部分是线程池里某一个线程的执行过程,如下图。代码参考JIoEndpoint.java

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

1、SSL?handshake,serverSocketFactory.handshake(socket.getSocket()),里面没有方法执行。

2、state?=?handler.process(socket,SocketStatus.OPEN),(其中handler就是JIoEndpoint的属性,SocketProcessor属于内部类,所以属性共用,十五章中的1介绍过handler初始化),handler是Http11Protocol$Http11ConnectionHandler。调用process就是调用父类AbstractConnectionHandler(属于AbstractProtocol的内部类)的process方法。

(1)、P?processor?=?connections.remove(socket.getSocket()),因为connections=空,所以processor=null;

(2)、processor?=?recycledProcessors.poll(),其中RecycledProcessors<P,S>?recycledProcessors?=new?RecycledProcessors<P,S>(this),this=?Http11Protocol$Http11ConnectionHandler,在AbstractProtocol类中,代码如下。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

???1)、调用ConcurrentLinkedQueue<E>的poll方法。

(3)、processor?=?createProcessor(),也就是调用Http11Protocol$Http11ConnectionHandler的createProcessor()

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

???1)、创建HTTP1Processor对象。调用父类Http11Processor构造方法,调用父类AbstractHttp11Processor构造方法,调用父类AbstractProcessor构造方法。

???2)、设置属性。

???3)、register(processor),代码如下,主要是requestInfo设置属性和注册Mbean。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

(4)、initSsl,判断是否支持SSL。

(5)、state?=?processor.process(socket),调用父类AbstractHttp11Processor类的process方法。代码?在AbstractHttp11Processor.java中。

????1)、Setting?up?the?I/O

????2)、设置属性。

????3)、prepareRequest(),主要是设置request属性。

????4)、adapter.service(request,?response),后续介绍。

???????1))、这里解释一下adapter的由来

???????????1)))、adapter属于AbstractProcessor的属性

???????????2)))、在创建processor是设置的。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

????????????3)))、其中proto是在创建Http11ConnectionHandler对象时设置,proto也就是Http11Protocol对象和protocolHandler。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

????????????4)))、其中Http11ConnectionHandler对象是在构建Http11Protocol时设置,其中this为当前对象Http11Protocol。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

????????????5)))、其中Http11Protocol是在构建Connector时创建,protocolHandler也就是Http11Protocol对象。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

?????????????6)))、adapter是在connector的init时创建

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

????2))、总结一下就是endpoint中有handler,handler中有protocol来创建processor并且设置属性,processor中adapter,adapter中有connector。如下图黑线为包含,红线为指向。

Tomcat源码解读-代码走读之JIoEndpoint$SocketProcessor.run(四十八)

5)、AbstractHttp11Processor的process方法剩下部分,后续介绍。

(6)、AbstractConnectionHandler的process方法剩下部分,后续介绍。

3、SocketProcessor的run方法剩下部分,后续介绍。

?

热点排行