Undertow是一款Java编写的轻量级高性能的Web服务器,可提供基于NIO的阻塞和非阻塞API。
Undertow设计为完全可嵌入的,并具有易于使用的流畅的Builder API。 Undertow的生命周期完全由嵌入应用程序控制。
Undertow的特性:
- 支持HTTP / 2
- 支持HTTP升级,允许多个协议通过HTTP端口进行多路复用
- 提供对Web Socket的全面支持,包括JSR-356支持。
- Servlet 4.0
- 可以嵌入在应用程序中或独立运行
- 通过将处理程序链接在一起来配置Undertow服务器。它可以对各种功能进行配置,方便灵活。
Spring Boot项目中的引入方式
Spring Boot 可以内嵌 Jetty , Tomcat , Undertow , 默认是Tomcat
要使用 Undertow 只需要在pom配置文件中移除 Tomcat,添加 Undertow 的依赖:
<code>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
<exclusions>
<exclusion>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-tomcat/<artifactid>
/<exclusion>
/<exclusions>
/<dependency>
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-undertow/<artifactid>
/<dependency>/<code>
在yml文件中添加Undertow的配置:
<code>server:
# 服务器的HTTP端口,默认为80
port: 8080
http2:
enabled: true
servlet:
# 应用的访问路径
context-path: /
# 下面是配置undertow作为服务器的参数
undertow:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io-threads: 4
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
# 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
worker-threads: 80
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
# 每块buffer的空间大小,越小的空间被利用越充分
buffer-size: 1024
# 是否分配的直接内存
direct-buffers: true/<code>
这样,配置完成了。
在并发量不高的情况下 , Tomcat与undertow的差别不大 , 如果是高并发的业务系统,Undertow是会使一个更好的选择。
![SpringBoot使用Undertow做服务器](http://p2.ttnews.xyz/loading.gif)
閱讀更多 瑜豆IT 的文章