Undertow学习

Undertow介绍

Undertow是一个用java编写的灵活、高性能的web服务器,提供基于NIO的阻塞和非阻塞API。
Undertow有一个基于组合的体系结构,允许您通过组合小型单用途处理程序来构建web服务器。为您提供了在完整的Java EE servlet 4.0容器或低级别非阻塞处理程序之间进行选择的灵活性。
Undertow被设计为完全可嵌入,具有易于使用的流畅构建器API。Undertow的生命周期完全由嵌入应用程序控制。
Undertow由JBoss赞助,是Wildfly应用服务器中的默认web服务器。

官方资源和相关网址

官方网站

Undertow Homepage

GitHub仓库

Undertow on GitHub

文档

Undertow Documentation

相关项目和集成

WildFly - 一个流行的Java应用服务器,内置了Undertow作为其Web服务器。

Spring Boot - 提供了对Undertow的支持,可以作为嵌入式服务器使用。

主要特点

模块化设计:Undertow的核心非常小,它通过组合不同的功能模块来构建完整的Web服务器。这种设计使得开发者可以根据需要选择和配置所需的功能。

高性能:Undertow使用非阻塞I/O和直接缓冲区,这使得它在处理大量并发请求时非常高效。它还支持HTTP/2,进一步提高了性能和效率。

灵活的部署:Undertow可以作为独立的Web服务器运行,也可以嵌入到Java应用程序中。它支持传统的WAR部署,也支持直接部署JAR文件。

全面的Servlet支持:Undertow完全兼容Servlet 3.1规范,支持异步Servlet、WebSocket和Servlet异步I/O。

易于配置:Undertow的配置可以通过编程方式进行,也可以通过XML或属性文件进行。这使得配置和管理变得简单直观。

使用场景

Undertow适用于需要高性能和灵活性的Web应用场景,特别是对于微服务架构和云原生应用。由于其轻量级和高性能的特点,Undertow常被用于构建高并发的Web服务和API。

为什么要选择Undertow?


HTTP/2支持 


Undertow支持HTTP/2开箱即用,无需覆盖所需的引导类路径。


HTTP升级支持


支持HTTP升级,允许在HTTP端口上多路传输多个协议。


Web套接字支持


Undertow提供了对Web套接字的全面支持,包括JSR-356支持。


Servlet 4.0


Undertow提供了对Servlet 4.0的支持,包括对嵌入式Servlet的支持。也可以在同一部署中混合使用Servlet和本机流下非阻塞处理程序。


可嵌入的


Undertow可以嵌入到应用程序中,也可以只需几行代码即可独立运行。


灵活的


Undertow服务器是通过将处理程序链接在一起进行配置的。可以根据需要添加尽可能多或尽可能少的功能。

示例代码1

以下是一个简单的使用Undertow创建Web服务器的示例:

public class HelloWorldServer {

    public static void main(final String[] args) {
        Undertow server = Undertow.builder()
                .addHttpListener(8080, "localhost")
                .setHandler(new HttpHandler() {
                    @Override
                    public void handleRequest(final HttpServerExchange exchange) throws Exception {
                        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
                        exchange.getResponseSender().send("Hello World");
                    }
                }).build();
        server.start();
    }
}

代码来自:Undertow · JBoss Community

springboot 集成Undertow

pom.xml添加依赖
<dependencies>
    <!-- 其他依赖 -->
    <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>
</dependencies>
application.yml 示例
server:
  # HTTP端口,默认为8080
  port: 8080 
  undertow:
	# 缓冲区大小
    buffer-size: 1024
	# 是否使用直接缓冲区
    direct-buffers: true 
	 # I/O线程数
    io-threads: 4
	 # 工作线程数
    worker-threads: 8
    accesslog:
	 # 是否启用访问日志
      enabled: true
	   # 访问日志目录
      dir: ./logs/access
控制器示例
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/demo")
    public String demo() {
        return "Hello, Undertow!";
    }
}

访问http://localhost:8080/hello时,应该会看到“Hello, Undertow!”的响应。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值