tomcat很多人讲的比我清楚 我随便记录一下

概要

什么是tomcat,什么是Catalina,什么是Coyote?
tomcat是web服务器,包括静态页面等
Catalina是Tomcat里面的servlet容器
Coyote是Tomcat的连接器组件,实现http1.1,http2.0等内容

Tomcat的四种网络模型

BIO :阻塞式IO,采用传统的java IO进行操作,该模式下每个请求都会创建一个线程,
NIO :同步非阻塞,比传统BIO能更好的支持大并发,tomcat 8.0 后默认采用该模式
APR :tomcat 以JNI形式调用http服务器的核心动态链接库来处理文件读取或网络传输操作,需要编译安装APR库
AIO :异步非阻塞,tomcat8.0后支持

四种网络模型性能问题

BIO最弱,后面三个不好比较,应该是差不多,这就是为什么在springboot2.X都没有提供对tomcat网络为APR模型的设置。
因为真的没必要

Tomcat启动流程

Boostrap中main函数

  1. Catalina.load() 先解析XML,然后StandServer.init()

  2. StandServer.Start()

一句话概括

load:解析xml定制化创建对象,Catalina是load的载体
init:对象初始化的工作,StandServer是init的源头
start:对象start启动线程开始工作,StandServer是start的源头

对象模型依赖关系

正如配置一样

<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               pollerThreadCount="1"
               maxThreads="500"
               acceptorThreadCount="1"
               redirectPort="8443" />
    <Engine>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
      </Host>
    </Engine>
  </Service>
</Server>

init:
依次init
StandServer–>StandService–>Connector–>HTTP11Handler–>NioEndPoint(bind)
start: (两条线)
依次start
StandServer–>StandService–>StandEngine–>…–>WebAppLoader(加载自己的listener和filter)
StandServer–>StandService–>Connector–>HTTP11Handler–>NioEndPoint(启动Acceptor接受连接线程和启动Poller用于读取socket数据)

请求流程

NioEndPoint–>HTTP11Processor–>CoyoteAdapter–>Connetct–>StandServie(Pipeline)–>反射(init你的servlet)–>doGet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值