Closed mysterin closed 5 years ago
public void start() throws LifecycleException { getServer(); getConnector(); server.start(); }
getServer() 用来创建 Service, 然后把 Service 加入到 Server. getConnector() 用来创建 Connector, 然后把 Connector 加入到 Service. Connector 的创建会创建 Http11NioProtocol, 而 Http11NioProtocol 的创建也会去创建 NioEndpoint. server.start() 会逐步初始化 Server, Service, Connector, Http11NioProtocol, NioEndpoint. 具体过程大概就是先调用这些对象的 init() 方法初始化, 然后调用对应的 start() 方法完成.
getServer()
Service
Server
getConnector()
Connector
Http11NioProtocol
NioEndpoint
server.start()
init()
start()
上面的初始化主要看 NioEndpoint 的初始化. 这个对象的初始化会绑定端口监听, 然后创建一个处理请求的线程池, 两个 Poller 线程, 一个用来等待连接请求的 Acceptor 线程. 具体就是 Acceptor 线程等待 socket 连接, 一旦连接上了, 就把连接封装成 PollerEvent 加入到 Event 队列中; 然后 Poller 线程会从队列取出 PollerEvent, 交给线程池处理.
PollerEvent
tomcat 启动过程
getServer()
用来创建Service
, 然后把Service
加入到Server
.getConnector()
用来创建Connector
, 然后把Connector
加入到Service
.Connector
的创建会创建Http11NioProtocol
, 而Http11NioProtocol
的创建也会去创建NioEndpoint
.server.start()
会逐步初始化Server
,Service
,Connector
,Http11NioProtocol
,NioEndpoint
. 具体过程大概就是先调用这些对象的init()
方法初始化, 然后调用对应的start()
方法完成.EndPoint
上面的初始化主要看
NioEndpoint
的初始化. 这个对象的初始化会绑定端口监听, 然后创建一个处理请求的线程池, 两个 Poller 线程, 一个用来等待连接请求的 Acceptor 线程. 具体就是 Acceptor 线程等待 socket 连接, 一旦连接上了, 就把连接封装成PollerEvent
加入到 Event 队列中; 然后 Poller 线程会从队列取出PollerEvent
, 交给线程池处理.