雖然如今對大多數程序員來說,基本不會再有使用Java開發一個服務器這樣的任務,可是,這方面的技術研究一下,對本身的技術提升仍是很是有幫助的。說不定啥時候能派上用場。 程序員
使用Java(J2SE)來設計服務器產品(不使用開源或其餘已有產品)的架構,隨着Java的不斷髮展,這幾年也發生了很大變化。在JDK1.4以前,使用Java構建服務器應用自己就不多,因此這裏也就不提了,咱們從JDK1.4開始說。 編程
第一階段: 服務器
要點是:一個鏈接一個線程 架構
![]() |
階段2: 框架
服務器端採用了線程池 函數
![]() |
階段1和階段2雖然簡單,可是很實用,在不少場景下仍然是第一選擇。並且編程模型業內很是簡單。 線程
階段3:採用非阻塞IO,多路複用技術,又有兩種不一樣的方式 設計
![]() |
![]() |
這種方式很重要的一點就是在IO事件發生時獲得通知,由程序進行處理。 事件
NIO給編程帶來了很大的複雜度,使用NIO開發很是不容易,也很容易犯錯誤,因此,採用別人的框架是一個簡單而天然的選擇,採用grizzly和mina都很不錯,對通用的場景都能知足要求。這裏提醒一下,無論mina和grizzly,都有一些你不想用的特性,干擾你想用的功能,須要當心對待,最好本身也能處理mina和grizzly的bug,改進這些框架的功能。 圖片
再有,給予NIO來開發SSL也很複雜。
第四階段:使用AIO技術
![]() |
AIO最大的特性就是事前先設置好事件的回調函數,事件發生時自動調用回調。並且,獲得的通知是「IO操做完成」,而不是NIO的「IO操做即將開始」。
使用AIO,在上層開發SSL也也很麻煩。