main 启动 tomcat
maven:
https://mvnrepository.com/art…
启动:
endpoint
非阻塞模式:
public class Http11NioProtocol extends AbstractHttp11JsseProtocol<NioChannel> {public Http11NioProtocol() {super(new NioEndpoint());
}
}
异步模式:
public class Http11Nio2Protocol extends AbstractHttp11JsseProtocol<Nio2Channel> {public Http11Nio2Protocol() {super(new Nio2Endpoint());
}
}
过程剖析
1、指定 Protocol,初始化相应的 Endpoint,接下来是 NioEndpoint;
2、init 过程:在 NioEndpoint 中做 bind 操作;
3、start 过程:启动 worker 线程池,默认启动 1 个 Acceptor 和 2 个 Poller,可配;
4、Acceptor 获取到新的连贯后,getPoller0() 获取其中一个 Poller,而后 register 到 Poller 中;
5、Poller 循环 selector.select(*),如果有通道 readable,那么在 processKey 中将其放到 worker 线程池中。
线程模型