Tomcat学习积累笔记---Tomcat的连接器组件---Coyote

Tomcat学习积累笔记—Tomcat的连接器组件—Coyote

1.Coyote简介

Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝。客户端通过Coyote与服务器建⽴连接、发送请求并接受响应 。
  1. Coyote 封装了底层的⽹络通信(Socket 请求及响应处理)
  2. Coyote 使Catalina 容器(容器组件)与具体的请求协议(http请求,应用层)IO操作⽅式(有一些IO模型:BIO,NIO等,传输层)完全解耦
  3. Coyote 将Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由Catalina 容器进⾏处理,处理请求完成后, Catalina 通过Coyote 提供的Response 对象将结果写⼊输出流
  4. Coyote 负责的是具体协议(应⽤层)IO(传输层)相关内容
解耦

Tomcat学习积累笔记---Tomcat的连接器组件---Coyote
Tomcat学习积累笔记---Tomcat的连接器组件---Coyote

  1. Tomcat Coyote ⽀持的 IO模型与协议,协议对应应用层,IO模型对应传输层
  2. Tomcat⽀持多种应⽤层协议和I/O模型,如下:
    Tomcat学习积累笔记---Tomcat的连接器组件---Coyote
  3. 在 8.0 之前 ,Tomcat 默认采⽤的I/O⽅式为 BIO,之后改为 NIO。 ⽆论 NIO、NIO2 还是 APR, 在性能⽅⾯均优于以往的BIO。 如果采⽤APR,甚⾄可以达到 Apache HTTP Server 的影响性能。

2.Coyote内部组件及工作流程

Tomcat学习积累笔记---Tomcat的连接器组件---Coyote

流程分析
  1. 当一个request的http请求过来的时候连接器组件要捕获这个请求
  2. Coyote 的组件EndPoint,指的是一个通信端点,而且Coyote具有处理Socket的通信功能,而且EndPoint就是具体来做处理Socket通信的活的
  3. EndPoint对标是TCP/IP这部分的处理(Sockrt通信的处理),是实现TCP/IP协议的,也是对传输层的抽象,后来会发现他就是做Socket通信编码
  4. 捕获到socket之后将它传入到Processor中,Processor是处理HTTP/AJP的(应用层协议),所以说Processor是应用协议处理接口
  5. Processor解析由EndPoint传过来的socket,读取里面的字节流,将socket解析成Request对象,这个Request对象是tomcat原生的Request对象
  6. Request对象通过AdapterRequest对象转换成ServletRequest对象,之后传递给Container
  7. Containner处理完就开始返回是上面的逆向方式
  8. 可以看出:EndPointProcessorAdapter这三个组件共同完成Coyote的功能
    Tomcat学习积累笔记---Tomcat的连接器组件---Coyote