Tomcat初学(二)架构连接器

150 阅读2分钟

了解系统架构,需要明确系统主要职能: HTTP服务器 + servlet容器
1、处理网络协议。Socket连接、字节流到request、response封装
2、处理具体request、管理servlet生命周期
对应两个组件:
1、连接器
2、容器

连接器和容器一起对外提供服务,合起来被定义为Service。最顶层是 Server,这里的 Server 指的就是一个 Tomcat 实例。一个 Server 中有一个或者多个 Service,一个 Service 中有多个连接器和一个容器。连接器与容器之间通过标准的 ServletRequest 和 ServletResponse 通信。

连接器需要完成 3 个高内聚的功能:
网络通信。
应用层协议解析。
Tomcat Request/Response 与 ServletRequest/ServletResponse 的转化。

Endpoint 负责网络通信,
Processor 负责应用层协议解析,
Adapter 负责 Tomcat Request/Response 与 ServletRequest/ServletResponse 之间的转换

连接器模块用三个核心组件:Endpoint、Processor 和 Adapter 来分别做三件事情,其中 Endpoint 和 Processor 放在一起抽象成了 ProtocolHandler 组件,它们的关系如下图所示

你可以把Netty理解成Tomcat中的连接器,它们都负责网络通信,都利用了Java NIO非阻塞特性。但Netty素以高性能高并发著称,为什么Tomcat不把连接器替换成Netty呢?第一个原因是Tomcat的连接器性能已经足够好了,同样是Java NIO编程,套路都差不多。第二个原因是Tomcat做为Web容器,需要考虑到Servlet规范,Servlet规范规定了对HTTP Body的读写是阻塞的,因此即使用到了Netty,也不能充分发挥它的优势。所以Netty一般用在非HTTP协议和Servlet的场景下。