Servlet,Tomcat,Jetty,Netty,Mina对⽐
Servlet, Tomcat, Jetty, Netty,Mina
结论
先说结论吧: Servlet是⼀种Java EE规范,Tomcat & Jetty是Servlet容器,Tomcat包含了Servlet。Servlet本⾝并不能处理外部请求,需要Servlet容器的配合,Netty和MINA是⽹络框架,我们可以使⽤Netty造出⾃⼰类似Tomcat的web服务器。简单的关系的话 Tomcat = Jetty > Netty & MINA > Servlet。
Servlet
wiki上的定义:
Servlet 是⽤ Java 编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,⽣成动态 Web 内容。狭义的 Servlet 是指Java 语⾔实现的⼀个接⼝,⼴义的 Servlet 是指任何实现了这个 Servlet 接⼝的类,⼀般情况下,⼈们将 Servlet 理解为后者。Tomcat
wiki的定义:
Tomcat 是由 Apache 软件基⾦会下属的 Jakarta 项⽬开发的⼀个 Servlet 容器,按照 Sun Microsystems 提供的技术规范,实现了对 Servlet 和 JavaServer Page(JSP)的⽀持,并提供了作为 Web 服务器的⼀些特有功能,如 Tomcat 管理和控制平台、安全域管理和 Tomcat 阀等。由于 Tomcat 本⾝也内含了⼀个 HTTP 服务器,它也可以被视作⼀个单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆,Apache HTTP 服务器是⼀个⽤C语⾔实现的 HTTPWeb服务器;这两个 HTTP web server 不是捆绑在⼀起的。Apache Tomcat 包含了⼀个配置管理⼯具,也可以通过编辑XML格式的配置⽂件来进⾏配置。
wiki 上跟进的很快也改成 Jakarta 了。
默认使⽤BIO。⽀持(BIO, NIO, APR(Apache Portable Runtime/Apache可移植运⾏库))apr其实也是nio,是操作系统级别的⽀持
http协议
Jetty
wiki的定义:
Jetty是⼀个纯粹的基于Java的⽹页服务器和Java Servlet容器。尽管⽹页服务器通常⽤来为⼈们呈现
⽂档,但是Jetty通常在较⼤的软件框架中⽤于计算机与计算机之间的通信。Jetty作为Eclipse基⾦会的⼀部分,是⼀个⾃由和开源项⽬。该⽹页服务器被⽤在Apache ActiveMQ[2]、Alfresco[3]、Apache Geronimo[4]、Apache Maven、Apache Spark、Google App Engine[5]、
Eclipse[6]、FUSE[7]、Twitter’s Streaming API[8]、Zimbra[9]等产品上。Jetty也是Lift、Eucalyptus、Red5、Hadoop、I2P等开源项⽬的服务器。[10] Jetty⽀持最新的Java Servlet API(带JSP的⽀持),⽀持SPDY和WebSocket协议。
Jetty 是⼀个Web服务器(HTTP),类似于Tomcat等,但⽐⼤多数servlet容器都要轻。这更接近传统的Java服务器应⽤程序
(servlet,WAR⽂件)的⽅式。与Netty⼀样,它⾜够轻巧,可以嵌⼊到Java应⽤程序中。
默认使⽤NIO。⽀持(BIO, NIO, AIO(jetty9))
servlet和tomcat的关系http协议
Netty
wiki的定义:
Netty is a non-blocking I/O client-server framework for the development of Java network applications such as protocol servers and clients. The asynchronous event-driven network application framework and tools are used to simplify network programming such as TCP and UDP socket servers.[2] Netty includes an implementation of the reactor pattern of programming.
翻译如下:
Netty是⼀个基于NIO客户端-服务端框架,提供给诸如协议服务端与客户端的Java⽹络应⽤。异步事件驱动⽹络应⽤框架和⼯具⽤来简化TCP和UDP⽹络编程。Netty包括了⼀种响应式编程的实现。
使⽤NIO。
tcp/udp协议
Mina
wiki的定义:
Apache MINA (Multipurpose Infrastructure for Network Applications)[1] is an open source Java network application framework.
MINA can be used to create scalable, high performance network applications. MINA provides unified APIs for various transports like TCP, UDP, serial communication. It also makes it easy to make an implementation of custom transport type. MINA provides both high-level and low-level network APIs.
翻译如下
Apache MINA 是⼀个开源Java⽹络应⽤框架。MINA可以创建表现良好的⽹络应⽤。MINA为各中通讯机制⽐如TCP,UDP提供统⼀的API。并且也可以很⽅便的实现⼀个⾃定义通讯⽅案。MINA提供⾼层和底层的API。
tcp/udp协议
关系
Servlet ⼀种规范
Servlet是并不是对⽹络服务器的封装,⽽是JEE规范当中的⼀个。所以它可以⽀持多层⽤户协议。
Tomcat & Jetty 轻量级服务器
它们俩是同⼀级别的,都是Servlet容器。对于Servlet容器的⼯作机制这⾥有⼀篇很棒的blog
Netty & MINA ⽹络编程框架
Netty是基于NIO的,Netty也像wiki介绍中说的Netty在很多⼤型项⽬中使⽤,之前⽂章中的 ElasticSearch transport也使⽤了Netty。MINA也是NIO框架,和Netty处于同⼀级别。下⾯是它们的区别:
1. mina⽐netty出现的早,都是Trustin Lee的作品;
2. mina将内核和⼀些特性的联系过于紧密,使得⽤户在不需要这些特性3的时候⽆法脱离,相⽐下性能会有所下降;netty解决了这个设
计问题;
3. netty的⽂档更清晰,很多mina的特性在netty⾥都有;
4. netty更新周期更短,新版本的发布⽐较快;
5. 它们的架构差别不⼤,mina靠apache⽣存,⽽netty靠jboss,和jboss的结合度⾮常⾼,netty有对google protocal buf的⽀持,有更完
整的ioc容器⽀持(spring,guice,jbossmc和osgi);
6. netty⽐mina使⽤起来更简单,netty⾥你可以⾃定义的处理upstream events 或/和 downstream events,可以使⽤decoder和encoder来
解码和编码发送内容;
7. netty和mina在处理UDP时有⼀些不同,netty将UDP⽆连接的特性暴露出来;⽽mina对UDP进⾏了⾼级层次的抽象,可以把UDP当
成”⾯向连接”的协议,⽽要netty做到这⼀点⽐较困难。mina把TCP和UDP⼀样当”有连接”的处理,⼀个UDP请求会按照address产⽣⼀个新的 IoSession,过期时间是1分钟,这样做的好处是显然的,但是对于有性能要求的项⽬就不好了,对⼀个⽆连接的东西cache 1分钟,⼤多数时候可能是⽩cache了,做⽆⽤功。 Mina这样做可能还有个初衷是连续解码⽤的,⽐如⼀个包太⼤了,分了两次传输;但是这样的设计应该是udp⼤忌了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。