下面再來看看Tomcat是如何使用NIO來構架Connector這塊的。後端
先看看Tomcat Connector這塊的類圖:多線程
其中:線程
NioEndpoint負責組裝各部件隊列
Acceptor負責監聽新鏈接,並把鏈接交給Pollerio
Poller負責監聽所管轄的channel隊列,並把請求交給SocketProcessor處理select
SocketProcessor負責數據處理,並把請求傳遞給後端業務處理模塊sso
在整個服務端處理請求的過程能夠分爲三個階段,時序圖以下所示:請求
階段一:監聽並創建鏈接channel
這一階段主要是Acceptor監聽新鏈接,並輪詢取一個Poller ,把鏈接交付給Pollerim
階段二: 監聽客戶端的請求
這一過程主要是讓每一個Poller監聽所管轄的channel隊列,select到新請求後交付給SocketProcessor處理
階段三:處理請求
這一過程就是從多線程執行SocketProcessor,作數據和業務處理
因而乎咱們發現拋開具體代碼細節,Tomcat和Jetty在NIO的使用方面是很是一致的,採用的模式依然是下圖: