Tomcat学习积累笔记---Tomcat的连接器组件---Coyote
Tomcat学习积累笔记—Tomcat的连接器组件—Coyote
1.Coyote简介
Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝。客户端通过Coyote与服务器建⽴连接、发送请求并接受响应 。
- Coyote 封装了底层的⽹络通信(Socket 请求及响应处理)
- Coyote 使Catalina 容器(容器组件)与具体的
请求协议(http请求,应用层)
及IO操作⽅式(有一些IO模型:BIO,NIO等,传输层)
完全解耦 - Coyote 将Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由Catalina 容器进⾏处理,处理请求完成后, Catalina 通过Coyote 提供的Response 对象将结果写⼊输出流
- Coyote 负责的是具体
协议(应⽤层)
和IO(传输层)
相关内容
解耦
-
Tomcat Coyote ⽀持的 IO模型与协议
,协议对应应用层,IO模型对应传输层 -
Tomcat⽀持多种应⽤层协议和I/O模型
,如下: - 在 8.0 之前 ,Tomcat 默认采⽤的I/O⽅式为 BIO,之后改为 NIO。 ⽆论 NIO、NIO2 还是 APR, 在性能⽅⾯均优于以往的BIO。 如果采⽤APR,甚⾄可以达到 Apache HTTP Server 的影响性能。
2.Coyote内部组件及工作流程
流程分析
- 当一个
request的http请求
过来的时候连接器组件要捕获
这个请求 - Coyote 的组件
EndPoint
,指的是一个通信端点,而且Coyote具有处理Socket的通信功能
,而且EndPoint就是具体来做处理Socket通信
的活的 -
EndPoint
对标是TCP/IP
这部分的处理(Sockrt通信的处理)
,是实现TCP/IP协议的,也是对传输层的抽象,后来会发现他就是做Socket通信编码
的 - 捕获到
socket
之后将它传入到Processor
中,Processor
是处理HTTP/AJP的(应用层协议)
,所以说Processor
是应用协议处理接口 -
Processor
解析由EndPoint
传过来的socket
,读取里面的字节流,将socket
解析成Request对象
,这个Request对象是tomcat原生的Request对象
-
Request对象
通过Adapter
将Request对象
转换成ServletRequest对象
,之后传递给Container
-
Containner处理完
就开始返回是上面的逆向方式 - 可以看出:
EndPoint
,Processor
,Adapter
这三个组件共同完成Coyote的功能