Jetty服務器架構分析(下) – JAVA編程語言程序開發技術文章

說過瞭服務器啟動,最後來看一下請求處理過程,服務器啟動好後,處於待命狀態,請求來瞭,請求處理過程由分兩個建階段:




  • 請求連接建立過程(以NIO為例)

     前面有提到,從線程池中固定分配瞭一個線程專門用於等待新連接,就是上圖的監聽線程,沒有請求來時,該線程是阻塞在accept()方法上的,當新連接來建立連接時,accept方法分配瞭一個socket,並將其設置為nonblocking,最後要做的就是將該socket丟給某個Acceptor線程(基本上機會均等)處理,然後立馬返回繼續處於接受狀態,可以這個線程的工作是相當的簡單的,效率那也是相當的高。


         Acceptor線程有很多個(全部來自於線程池,並且固定分配出來,基於jetty.xml配置中的Acceptors配置數量),每個線程都維護瞭一個SelectSet,每個SelectSet又對應瞭一個Selector,這些線程會檢測當前是否有任務來,例如檢測changes隊列中是否有任務,有並且是新連接,那麼就迅速建立一個endpoint<SPAN style="FONT-FAMILY: 宋體; mso-fareast-font-family:

發佈留言