從Jetty、Tomcat和Mina中提煉NIO構架網絡服務器的經典模式(三)

最後咱們再看看NIO方面最著名的框架Mina,拋開Mina有關session和處理鏈條等方面的設計,單單挑出前端網絡層處理來看,也採用的是與Jetty和Tomcat相似的模式,只不過它作了些簡化,它沒有隔開請求偵聽和請求處理兩個階段,所以,宏觀上看它只分爲兩個階段。前端

先看看它的類圖:tomcat

其中:服務器

SocketAcceptor起線程調用SocketAcceptor.Work負責新鏈接偵聽,並交給SocketIoProcessor處理網絡

SocketIoProcessor起線程調用SocketIoProcessor.Work負責偵聽所管轄的channel隊列, select到新請求後交給IoFilterChain處理session

IoFilterChain組裝了mina的處理鏈條框架

在整個服務端處理請求的過程能夠分爲兩個階段,時序圖以下所示:線程

階段一:監聽並創建鏈接設計

階段二: 監聽並處理客戶端的請求server

 

總結來看Jetty、tomcat和Mina,咱們也大概清楚了該如何基於NIO來構架網絡服務器,經過這個提煉出來的模式,我寫了個很簡單的NIO Server,在保持鏈接的狀況下,能夠很輕鬆的保持6萬鏈接(因爲有65535鏈接限制),並能在負載只有3左右的狀況下(4核),承擔3到4萬的TPS請求(固然作的事情很簡單,僅僅是把buffer轉化爲自定義協議的包,而後再把包轉爲buffer寫到客戶端)。所以簡單地實踐一下能夠證實這個模式的有效性,不妨再看看這個圖,但願對大夥之後寫server有用:隊列

相關文章
相關標籤/搜索