【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。学习