Spring Boot 默认使用的是 Tomcat 作为 Web 容器,同时也支持多种嵌入式Web服务器,包括Undertow和Jetty等。这里重点讨论tomcat和undertow的一些区别。首先我们对二者做一个基本的了解。
Undertow(读音[ˈʌndərtoʊ] )是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。Undertow 提供一个基础的架构用来构建 Web 服务器,这是一个完全为嵌入式设计的项目,提供易用的构建器 API,完全向下兼容 Java EE Servlet 3.1 和低级非堵塞的处理器。
Tomcat(读音[ˈtɑːmkæt] )是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP。Tomcat具有Web服务器特有的功能,包括 Tomcat管理和控制平台、安全局管理和Tomcat阀等。Tomcat本身包含了HTTP服务器,因此也可以视作单独的Web服务器。不过Tomcat和ApacheHTTP服务器不是一个东西,ApacheHTTP服务器是用C语言实现的HTTP Web服务器。
二者都可以作为Web容器对外提供Web服务,下面我们一起来看一看二者在功能上有何区别。
1. 更高的性能:Undertow相较于Tomcat具有更好的性能。
Undertow是一个轻量级的Web服务器,它基于非阻塞I/O和异步处理,可以提高请求处理速度和并发性能。在高并发场景下,Undertow能够处理更多的请求并提供更快的响应速度。
2. 轻量级:Undertow的代码库相对较小,这使得它在资源占用和启动时间方面具有优势。对于需要快速启动和低内存占用的应用场景,Undertow是一个不错的选择。
3. 更好的异步支持:Undertow 提供了完善的异步支持,可以处理更高并发的请求。
4. 更好的扩展性:Undertow 的设计非常灵活,可以方便地添加自定义的处理器和过滤器,从而满足不同的业务需求。
5. 易于配置:Undertow提供了简单易用的配置选项,使得开发者可以快速定制和部署应用程序。Spring Boot中的自动配置功能使得切换到Undertow变得非常简单。
6. WebSocket支持:虽然Tomcat也支持WebSocket,但Undertow在WebSocket方面的实现更加轻量级和高效。这使得Undertow在实时Web应用场景中更具优势。
7. HTTP/2支持:Undertow支持HTTP/2协议,这使得开发者可以利用HTTP/2的性能优势,如头部压缩、服务器推送等。
总之,Undertow 在性能、内存占用、异步支持和扩展性等方面都有优势,因此越来越多的 Spring Boot 开发者选择使用它作为 Web 容器。
看完以上区别,我们在项目中该如何选择?
需要注意的是,尽管以上7点都是Undertow的优势,但并非所有场景下Undertow都是更好的选择。Tomcat作为一个成熟的Web服务器和Servlet容器,拥有更丰富的功能、更完善的文档和更广泛的社区支持。在实际项目中,开发者需要根据具体的应用场景、性能需求和团队经验等因素来选择合适的Web服务器。