Tomcat源码分析(4)--StandardService类中涉及到的初始化和启动

initInternal方法

同server一样,service不存在init方法,也有一个从父类中查找init方法的过程,分别通过LifecycleMBeanBase和lifeCycle类,最后定位到本类的initinternal方法

这里写图片描述

该方法实现如下:

这里写图片描述

实际上就是执行service节点下engine、executor和connector节点对应类的init方法。重点讲下engine和connector。

Connector的init方法

这里写图片描述

protocolHandler是ProtocolHandler的一个实例,该类的继承关系如下:

这里写图片描述

直接定位到具体的实现类,其部分实现是:

这里写图片描述

在AbstractProtocol类中完成的大部分功能是将对象注册到JMX服务器

这里写图片描述

下面这个对象是和socket处理相关的,也是需要我们深入了解的

这里写图片描述

endpoint是AbstractEndpoint 具体实现类的对象,该类的继承关系是

这里写图片描述

这里我们只看NIOEndpoint相关的部分

这里写图片描述

这个方法调用了其父类AbstractEndpoint的init方法,该方法代码实现如下:

这里写图片描述

这个方法中调用了本类的抽象方法bind方法,我们直接定位到其实现类NIOEndpoint中,其实现代码如下:

这里写图片描述

这里面主要进行了NIO有关的配置,如开启通道和选择器等

startInternal方法

该方法实现如下:

这里写图片描述

Connector的start方法

和其init方法类似,这里主要是调用其内置对象ProtocolHandler的start方法,代码如下:

这里写图片描述

protocolhandler对象的start方法代码实现如下:

这里写图片描述

endpoint对象的start方法代码实现如下:

这里写图片描述

这里调用了本类的抽象startInternal方法,通过该方法定位到NIOEndPoint类中,该类的代码实现如下:

这里写图片描述

acceptor

上面startAcceptorThreads()方法中其实是启动acceptor线程的,其代码如下:

这里写图片描述

acceptor其实是内部抽象类,其继承关系如下:

这里写图片描述

我们直接定位到NioEndpoint内部类Acceptor的run方法中

这里写图片描述

这里写图片描述

这个方法中充分体现了acceptor的作用就是监听客户端的连接,需要注意的是这里的socket对象是SocketChannel类型的,接收到请求后通过 setSocketOption()将这个channel传递给poller线程
下面看看setSocketOption方法的代码实现:

这里写图片描述

SocketBufferHandler这个类封装了两个ByteBuffer类型的对象,分别作为写缓存和读缓存

这里写图片描述

Poller

本线程类的run方法如下:

这里写图片描述

SelectionKey中封装了channel的相关信息,然后将其传递到processKey中进行处理
后面的部分在请求处理这一章讲。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值