Tomcat链接器Connector的设计概述
目录
1、Connector的设计
想要与Container配合实现完整的服务器功能,Connector需要实现如下功能:
- 监听服务器端口,读取来自客户端的请求。(AbstractEndpoint)
- 将请求数据按照指定协议进行解析。(ProtocolHandler)
- 根据请求地址匹配正确的容器进行处理。(Processor处理 Mapper映射匹配)
- 将响应返回客户端。
ProtocolHandler:表示一个协议处理器,针对不同协议和I/O方式,提供不同的实现
AbstractEndpoint:由ProtocolHandler所包含的,用于启动Socket监听,这个抽象类按照I/O方式进行分类。如,Nio2Endpoint标识非阻塞式Socket I/O。
Processor:按照指定协议读取数据,并将请求交给容器处理。如Http11NioProcessor标识在NIO方式下HTTP请求的处理类。
Processor需要处理2件事情:
1、按照请求地址映射到具体容器。由Mapper类实现
2、监听容器的注册和销毁。由MapperListener类实现
注:Tomcat7之前,Mapper由Connector维护,Tomcat8之后,Mapper由Service维护。
2、从Tomcat应用服务器的设计视角看Connector
如上图所示,Tomcat通过适配器模式(Adapter)实现了Connector与Mapper、Container的解耦。Tomcat默认的Connector实现(Coyote)对应的适配器为CoyoteAdapter。也就是说,如果你希望使用Tomcat的链接器方案,又想脱离Servlet容器,你只需要实现自己的Adapter即可。当然,你还需要按照Container的定义开发你自己的容器实现(这个实现不一定要遵从Servlet规范)。