`
阿凡提学计算机
  • 浏览: 40172 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

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

阅读更多

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



 

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

2、state = handler.process(socket,SocketStatus.OPEN),(其中handler就是JIoEndpoint的属性,SocketProcessor属于内部类,所以属性共用,十五章中的1介绍过handler初始化),handlerHttp11Protocol$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类中,代码如下。



 

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

3)、processor = createProcessor(),也就是调用Http11Protocol$Http11ConnectionHandlercreateProcessor()



 

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

   2)、设置属性。

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



 

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是设置的。



 

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



 

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



 

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



 

             6)))、adapter是在connectorinit时创建



 

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



 

5)、AbstractHttp11Processorprocess方法剩下部分,后续介绍。

6)、AbstractConnectionHandlerprocess方法剩下部分,后续介绍。

3SocketProcessorrun方法剩下部分,后续介绍。

 
  • 大小: 25.5 KB
  • 大小: 4.3 KB
  • 大小: 28.3 KB
  • 大小: 21.3 KB
  • 大小: 12.4 KB
  • 大小: 7.7 KB
  • 大小: 9.3 KB
  • 大小: 10.8 KB
  • 大小: 21.1 KB
  • 大小: 8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics