【jetty】Jetty與Tomcat的區別

Jetty 的架構從前面的分析可知,它的全部組件都是基於 Handler 來實現,固然它也支持 JMX。可是主要的功能擴展均可以用 Handler 來實現。能夠說 Jetty 是面向 Handler 的架構,就像 Spring 是面向 Bean 的架構,iBATIS 是面向 statement 同樣,而 Tomcat 是以多級容器構建起來的,它們的架構設計必然都有一個「元神」,全部以這個「元神「構建的其它組件都是肉身。web

從設計模板角度來看 Handler 的設計實際上就是一個責任鏈模式,接口類 HandlerCollection 能夠幫助開發者構建一個鏈,而另外一個接口類 ScopeHandler 能夠幫助你控制這個鏈的訪問順序。另一個用到的設計模板就是觀察者模式,用這個設計模式控制了整個 Jetty 的生命週期,只要繼承了 LifeCycle 接口,你的對象就能夠交給 Jetty 來統一管理了。因此擴展 Jetty 很是簡單,也很容易讓人理解,總體架構上的簡單也帶來了無比的好處,Jetty 能夠很容易被擴展和裁剪。設計模式

相比之下,Tomcat 要臃腫不少,Tomcat 的總體設計上很複雜,前面說了 Tomcat 的核心是它的容器的設計,從 Server 到 Service 再到 engine 等 container 容器。做爲一個應用服務器這樣設計無口厚非,容器的分層設計也是爲了更好的擴展,這是這種擴展的方式是將應用服務器的內部結構暴露給外部使用者,使得若是 想擴展 Tomcat,開發人員必需要首先了解 Tomcat 的總體設計結構,而後才能知道如何按照它的規範來作擴展。這樣無形就增長了對 Tomcat 的學習成本。不單單是容器,實際上 Tomcat 也有基於責任鏈的設計方式,像串聯 Pipeline 的 Vavle 設計也是與 Jetty 的 Handler 相似的方式。要本身實現一個 Vavle 與寫一個 Handler 的難度不相上下。表面上看,Tomcat 的功能要比 Jetty 強大,由於 Tomcat 已經幫你作了不少工做了,而 Jetty 只告訴,你能怎麼作,如何作,有你去實現。服務器

單純比較 Tomcat 與 Jetty 的性能意義不是很大,只能說在某種使用場景下,它表現的各有差別。由於它們面向的使用場景不盡相同。從架構上來看 Tomcat 在處理少數很是繁忙的鏈接上更有優點,也就是說鏈接的生命週期若是短的話,Tomcat 的整體性能更高。架構

而 Jetty 恰好相反,Jetty 能夠同時處理大量鏈接並且能夠長時間保持這些鏈接。例如像一些 web 聊天應用很是適合用 Jetty 作服務器,像淘寶的 web 旺旺就是用 Jetty 做爲 Servlet 引擎。性能

另外因爲 Jetty 的架構很是簡單,做爲服務器它能夠按需加載組件,這樣不須要的組件能夠去掉,這樣無形能夠減小服務器自己的內存開銷,處理一次請求也是能夠減小產生的臨時 對象,這樣性能也會提升。另外 Jetty 默認使用的是 NIO 技術在處理 I/O 請求上更佔優點,Tomcat 默認使用的是 BIO,在處理靜態資源時,Tomcat 的性能不如 Jetty。學習

相關文章
相關標籤/搜索