这部分是线程池里某一个线程的执行过程,如下图。代码参考JIoEndpoint.java
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类中,代码如下。
1)、调用ConcurrentLinkedQueue<E>的poll方法。
(3)、processor = createProcessor(),也就是调用Http11Protocol$Http11ConnectionHandler的createProcessor()
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是在connector的init时创建
2))、总结一下就是endpoint中有handler,handler中有protocol来创建processor并且设置属性,processor中adapter,adapter中有connector。如下图黑线为包含,红线为指向。
5)、AbstractHttp11Processor的process方法剩下部分,后续介绍。
(6)、AbstractConnectionHandler的process方法剩下部分,后续介绍。
3、SocketProcessor的run方法剩下部分,后续介绍。
相关推荐
代码走读检查列表[参考].pdf
代码走读记录表模板代码走读记录表模板代码走读记录表模板
DPDKL2fwd代码走读报告(代码流程分析).pdf
代码走读[总结].pdf
Apache Spark源码走读之2 -- Job的提交与运行.pdf
代码走读工具Jupiter实践
在项目开发过程中,因代码质量不过关,进行了代码走读,事后把意见留存,组织成word文档。在以后遇到相同的问题时可以快速解决。
Apache Spark源码走读之如何进行代码跟读
代码走读记录,又称代码审查记录,包含C++代码走读,JAVA代码走读,C#代码走读
Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
Apache Spark源码走读之4 -- DStream实时流数据处理
Storm源码走读笔记 写的非常详细的代码走查笔记,对于想阅读源代码提高编程能力的同学非常有用哦。
Apache Spark源码走读之5 -- DStream处理的容错性分析
政教处范文致走读学生家长的公开信.doc
代码走读检查列表.pdf
SPEEDX 代码走读笔记.txt
1、准备工作 2、检查函数 3、类型检查 4、条件 5、循环 6、输入输出 等等
广播分发
FFmpeg开发资料和开发过程中的一些code走读报告
详细的Hadoop源码剖析电子版。书中引用了丰富的架构图片和流程来解析结合hadoop框架原理,推荐深度运维和二次开发者阅读