Tomcat NIO 基本架构
Tomcat NIO 基本架构图示
Tomcat Connector 的三大部分
- Http11NioProtocol
- Mapper
- CoyoteAdapter
Http11NioProtocol
- NioEndpoint
- Acceptor
- 1+线程(但并非线程池)
- 接收连接请求封装成NioChannel,构造一个PollerEvent发送给Poller
- Poller
- 1+线程(但并非线程池)
- 轮询PollerEvent队列消费消息,利用Selector对象轮询消费socket IO事件
- Worker
- 线程池,可以外部提供也可能内部创建,对应上图中的Executor
- 将socket封装到一个SocketProcessor对象,在Worker线程池中执行该SocketProcessor处理逻辑
- 从Http11ConnectionHandler中取出Http11NioProcessor,进而调用CoyoteAdapter逻辑
- NioSelectorPool
- Acceptor
- Http11ConnectionHandler : 具体实现类 AbstractProtocal内部类 ConnetionHandler
- Http11NioProcessor : 具体实现类 HttpNioProcessor
Mapper
类全路径org.apache.tomcat.util.http.mapper.Mapper。
维护一个从Host到Wrapper的各级容器的快照。主要是为了当http request被解析后,能够将http request绑定到相应的servlet进行处理。
CoyoteAdapter
类全路径org.apache.catalina.connector.CoyoteAdapter。
Tomcat Connector 初始化时会创建此对象并传递给 Http11NioProtocol 对象。