一張巨無霸圖
- 將Selector與一個Channel註冊綁定得到一個SelectedKey
- 異步將EndPoint附加到SelectedKey。
- channel數據準備就緒時喚醒select阻塞,根據SelectedKey的attachment判斷channel的是Selectable,或者根據SelectedKey判斷isConnectable。
- 如果是Selectable則回調相應的callback(例如:ReadCallback)
注:一個Selector可以監聽多個channel。
Server容器中的bean
0 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 10: Bean@7974}̲ "{QueuedThread…Bean@7975} “{ServerConnector@137a4b54{HTTP/1.1,[http/1.1]}{0.0.0.0:16090},MANAGED}”
2 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 10: Bean@7976}̲ "{o.s.b.c.e.j.…Bean@7977} “{AbstractLifeCycle@1acc873b{STOPPED},AUTO}”
4 = {ContainerLifeCycle$Bean@7978} “{ErrorHandler@6d617b07{STOPPED},AUTO}”
5 = {DefaultSessionIdManager@49bb808f{STARTED}[worker=node0],MANAGED}
ServerConnector容器中的bean
0 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 10: Bean@8091}̲ "{Server@797f9…Bean@8092} “{QueuedThreadPool[qtp509636452]@1e606f64{STARTED,8<=8<=200,i=4,q=0}[ReservedThreadExecutor@6cee903a{s=0/4,p=0}],UNMANAGED}”
2 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 10: Bean@8093}̲ "{ScheduledExe…Bean@8094} “{org.eclipse.jetty.io.ArrayByteBufferPool@1884e671,POJO}”
4 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 10: Bean@8095}̲ "{HttpConnecti…Bean@8096} “{SelectorManager@ServerConnector@137a4b54{HTTP/1.1,[http/1.1]}{0.0.0.0:16090},MANAGED}”
6 = {sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:16090],POJO}
EatWhatYouKill容器中的bean
0 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 11: Bean@13759}̲ "{SelectorProd…Bean@13760} “{QueuedThreadPool[qtp2042086224]@79b7c350{STARTED,8<=8<=200,i=8,q=0}[ReservedThreadExecutor@12670e55{s=0/4,p=0}],UNMANAGED}”
SelectorManager容器中的bean(當前案例中默認數量爲2)
0 = {ContainerLifeCycleKaTeX parse error: Expected 'EOF', got '}' at position 11: Bean@10700}̲ "{ManagedSelec…Bean@10701} “{ManagedSelector@424ebf5b{STOPPED} id=1 keys=-1 selected=-1 updates=0,AUTO}”
ManagedSelector容器中的bean
0 = {EatWhatYouKill@4e41b993/SelectorProducer@2a742ee4/IDLE/p=false/QueuedThreadPool[qtp2042086224]@79b7c350{STARTED,8<=8<=200,i=8,q=0}[ReservedThreadExecutor@12670e55{s=0/4,p=0}][pc=0,pic=0,pec=0,epc=0]@2020-05-24T16:24:06.017+08:00,MANAGED}
Server對connectors的特殊處理
Server中對connectors做了特殊處理,最後啓動
@Override
protected void start(LifeCycle l) throws Exception
{
// start connectors last
if (!(l instanceof Connector))
super.start(l);
}