Tomcat连接
概述
本文内容以常用的NIO连接处理为例,其他连接处理流程类似。同时,时序图中的类多数都为NioEndpoint类的内部类。
处理时序图
时序图说明
Connector
服务器端的一个服务端口的抽象,是处理连接的最上层对象。可以定义某个服务端内最大连接数,最大线程数,监听端口等。此类通过server.xml中的配置进行实例化并通过配置指定相应的协议(protocol属性,协议中包含协议对应的连接处理器和协议处理器),并与service组合。
以上时序图可以大致理解为一个socket请求访问Connector时,Connector内部的处理流程。
Connector在生命周期的init阶段会通过协议处理器内的Endpoint监听指定服务端口。
Http11NioProtocol
由server.xml中声明Connector时指定,ProtocolHandler接口的实现类。顾名思义,协议。其内部包含就收连接相关的endpoint、处理连接的ConnectorHandler、处理协议内容的Porcessor等属性,并会设置协议相关的固定属性,例如http协议头最大长度等属性。
Acceptor
用于接收客户端请求、并根据最大连接数控制是否阻塞请求的线程对象。在启动阶段启动,默认(通常)情况下只有一个线程启动。用于处理ServerSocketChannel接收到的SocketChannel。在run()方法中,会首先判断是否达到最大连接数(Connector的配置),达到则会阻塞线程直到释放连接(使用LimitLatch实现)。
获取到的SocketChannel会交由NioEndpoint.setSocketOptions(SocketChannel)处理。
NioEndpoint
专门用于处理请求的服务端点,内保包含Acceptor、Poller以及处理请求的工作线程等对象。NioEndpoint对象