Undertow使用详解

news2024/11/25 20:30:06

在这里插入图片描述

简介

在这里插入图片描述

Undertow是一个开源的、灵活的、高性能的非阻塞性应用服务器,由JBoss提供。它可以用作嵌入式服务器,也可以用作大型项目的全功能应用服务器。Undertow的设计以提供最高的性能和最大的灵活性为主要目标,支持非阻塞性和阻塞性处理方式,可以处理十万级的并发连接。

Undertow的历史可以追溯到2013年,当时Red Hat发布了JBoss AS 7,这是一个基于Java 7的轻量级应用服务器。Undertow作为JBoss AS 7的默认Web服务器,提供了高效的非阻塞I/O和异步处理能力。

随着时间的推移,Undertow不断发展和完善。在WildFly 10中,Undertow被确立为默认的Web服务器,取代了之前的Jetty。Undertow继续成为WildFly和WildFly Swarm等项目的核心组件。

在2018年,Red Hat宣布将Undertow捐赠给Jakarta EE,作为默认的Web服务器和Servlet容器。这标志着Undertow在Java EE生态系统中得到了更广泛的认可和应用。

Undertow的历史与JBoss AS 7、WildFly和Jakarta EE等项目紧密相关,它的发展得到了开源社区和Red Hat等公司的支持。

Undertow的核心是一个非阻塞性的HTTP服务器,提供了HTTP/1.1、HTTP/2和SPDY支持。Undertow的特性包括:

  1. 轻量化和灵活:Undertow非常小,整个服务器的基本运行只需要不到4MB的Jar包。它可以作为独立的嵌入式服务器运行,也可以作为大型的集群应用服务器运行。
  2. 高性能:Undertow是一款高性能的服务器,能够处理大量的并发连接,而且处理效率非常高。
  3. 支持HTTP/2:Undertow支持HTTP/2协议,这使得它能够有效地利用网络资源,提高响应速度。
  4. 对Servlet 4.0的支持:Undertow提供了对Servlet 4.0的支持,可以无缝集成各种现代化的Web技术。
  5. 非阻塞性I/O:Undertow的非阻塞性I/O模型可以最大限度地减少线程的使用,提高系统的扩展性。

Undertow的常见使用场景包括:作为一种嵌入式的服务器,用于为独立的应用程序提供网络服务;作为一种传统的应用服务器,用于部署和运行各种Web应用。由于Undertow提供了高性能和高并发性,因此它非常适合于处理大量的用户请求。

在这里插入图片描述

在这里插入图片描述

Undertow使用场景

Undertow的使用场景包括但不限于以下几个方面:

  1. 嵌入式服务器:Undertow可以作为嵌入式服务器,用于为独立的应用程序提供网络服务。由于其轻量化和灵活性,它非常适合于微服务架构,可以用于构建小型的、独立的服务。
  2. 传统应用服务器:Undertow也可以作为一种传统的应用服务器,用于部署和运行各种Web应用。由于Undertow提供了高性能和高并发性,因此它非常适合于处理大量的用户请求。
  3. 支持WebSockets:Undertow提供了对Web Socket的全面支持,包括JSR-356支持,这使得它适合构建需要实时通信的Web应用。
  4. 非阻塞性处理:Undertow支持非阻塞性处理方式,可以最大限度地减少线程的使用,提高系统的扩展性,使其适合处理高并发的请求。
  5. 灵活的扩展性:Undertow的Servlet容器支持多种传输方式,如HTTP、HTTPS、AJP和JOSE,这使得它具有很高的可扩展性,可以轻松地与各种现代Web技术集成。

Undertow是一个强大且灵活的服务器,适用于各种规模的项目和应用。

在这里插入图片描述

Undertow优缺点

  • Undertow的优势包括:
  1. 高性能:Undertow采用了异步处理方式,可以更好地利用CPU资源,提高系统的吞吐量和响应速度。
  2. 轻量级:Undertow的代码量比Tomcat少很多,因此在运行时的内存占用也更小。
  3. 灵活的配置:Undertow提供了很多可配置项,可以根据具体需求进行灵活配置,而Tomcat则相对固定。
  4. 更好的异步支持:Undertow在异步处理方面更加强大,可以支持WebSocket、Servlet 3.1等技术。
  5. 更好的可扩展性:Undertow的架构更加灵活,可以方便地进行扩展和定制。
  • Undertow也有一些劣势:
  1. 社区规模:尽管Undertow在某些方面表现优秀,但与Tomcat相比,其社区规模较小,可能意味着在遇到问题时获取支持和解决方案的难度可能会更大。
  2. 成熟度:Undertow的历史相对较短,与Tomcat相比,其成熟度可能稍逊一筹。这可能会影响到在生产环境中部署和使用的稳定性。
  3. 依赖问题:Undertow的某些高级特性可能需要依赖较难获取或管理的第三方库,这可能会增加部署和管理的复杂性。
  4. 工具支持:与Tomcat相比,一些开发工具可能对Undertow的支持不够完善,这可能会影响到开发效率和问题调试。

选择是否使用Undertow需要根据具体的应用场景和需求来决定。在需要高性能、轻量级和灵活配置的场景下,Undertow可能是一个不错的选择。而在需要稳定性和成熟度的场景下,Tomcat可能更为合适。

在这里插入图片描述

Undertow与Tomcat的比较

Undertow和Tomcat都是常用的Java Web服务器,它们在性能和特性上有所差异。

Undertow的优势包括:

  1. 高性能和低资源消耗:Undertow基于NIO,设计目标是高性能和低资源消耗。它利用了NIO的非阻塞IO特性,可以更高效地处理并发请求。相比之下,Tomcat使用的BIO模型在高并发情况下可能导致资源耗尽。
  2. 支持HTTP/2协议:Undertow支持HTTP/2协议,这是一种新一代高效的HTTP协议,通过多路复用的方式在单个TCP连接上同时处理多个请求,减少了网络延迟,提升了性能。而Tomcat目前只支持HTTP/1.1协议。
  3. 灵活的配置和扩展性:Undertow具有更灵活的配置方式,可以方便地进行扩展和定制。它还支持嵌入式开发,可以直接嵌入到Java项目中使用。

Tomcat的优势包括:

  1. 成熟的生态系统和广泛的支持:Tomcat拥有成熟的生态系统,广泛用于企业级应用开发,得到了社区的广泛支持和文档丰富的资料。这使得Tomcat在处理复杂的企业级应用程序时更加可靠和稳定。
  2. 功能完备:Tomcat提供了丰富的功能,例如支持Servlet和Web Socket,还提供了更完善的社区支持、更高的稳定性和更成熟的生态系统等特点。

Undertow在轻量级、高性能方面具有优势,适用于对性能要求较高的应用场景。而Tomcat虽然在性能方面稍逊一筹,但其稳定性和功能完备性使其成为企业级应用的首选。

在这里插入图片描述

Undertow与Jetty的比较

Undertow和Jetty都是高性能的Java Web服务器,它们在功能和性能上有所差异。

Undertow的优势包括:

  1. 高性能:Undertow采用了异步处理方式,可以更好地利用CPU资源,提高系统的吞吐量和响应速度。
  2. 灵活的配置:Undertow提供了很多可配置项,可以根据具体需求进行灵活配置,而Jetty则相对固定。
  3. 更好的异步支持:Undertow在异步处理方面更加强大,可以支持WebSocket、Servlet 3.1等技术。
  4. 更好的可扩展性:Undertow的架构更加灵活,可以方便地进行扩展和定制。

Jetty的优势包括:

  1. 轻量级:Jetty的代码量比Undertow少很多,因此在运行时的内存占用也更小。
  2. 社区规模:Jetty的社区规模较大,这意味着在遇到问题时更容易获取支持和解决方案。
  3. 成熟度:Jetty的历史相对较长,这意味着其在稳定性方面可能更优秀。

Undertow在高性能、灵活配置和异步处理方面具有优势,而Jetty则在轻量级、社区规模和成熟度方面表现优秀。

在这里插入图片描述

Undertow与Netty的比较

Undertow和Netty都是基于Java开发的网络通信框架,它们在应用范围和协议支持方面存在一些差异。

在应用范围上,Undertow主要用于构建Web服务器和Web应用程序,例如作为WildFly的默认Web服务器。而Netty的应用范围更加广泛,它主要用于构建各种网络应用,包括服务器和客户端,例如用于处理金融交易、大数据计算、游戏等领域。

在协议支持方面,Undertow主要支持HTTP协议,用于处理Web请求和响应。而Netty支持多种协议,包括TCP、UDP、HTTP、WebSocket等,可以灵活地应用于不同的网络通信场景。

此外,Undertow采用异步处理方式,具有高性能和低资源消耗的特点,而Netty也支持异步操作,但更注重于对各种网络协议的全面支持和灵活配置。

Undertow主要用于构建Web服务器和Web应用程序,而Netty则广泛应用于各种网络应用领域,支持多种协议并具有灵活的配置。选择使用哪个框架取决于具体的应用需求和场景。

在这里插入图片描述

SpringBoot整合Undertow

在Spring Boot中整合Undertow,可以通过以下步骤实现:

  1. 添加依赖:在pom.xml文件中添加Spring Boot Starter Undertow的依赖。例如:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
  1. 配置Undertow:在application.properties或application.yml文件中配置Undertow的相关属性。例如:
server.port=8080
server.undertow.servlet-container.servlet-mapping=/myapp/*=/myapp/*

上述配置中,server.port指定了服务器的端口号,server.undertow.servlet-container.servlet-mapping用于配置Undertow的Servlet映射。

  1. 创建Spring Boot应用程序:按照正常的Spring Boot应用程序开发流程,创建控制器、实体类等。
  2. 启动应用程序:通过运行Spring Boot应用程序,启动Undertow服务器。

通过以上步骤,就可以在Spring Boot中整合Undertow,并使用它作为Web服务器。需要注意的是,Undertow与Tomcat在特性和配置上存在差异,因此在进行整合时需要参考相关文档和资源,以确保配置正确和应用程序正常运行。

在这里插入图片描述

Undertow常用配置参数

Undertow的常用配置参数包括:

  1. io-threads:指定用于处理I/O操作的线程数,默认为CPU核心数。增加线程数可以提高并发性能,但也会增加CPU负载。
  2. worker-threads:指定用于处理请求的工作线程数,默认为CPU核心数的两倍。增加线程数可以提高并发处理能力。
  3. buffer-size:指定输入输出缓冲区的大小,默认为8192字节。可以根据实际情况调整该值,以平衡内存消耗和性能。
  4. server.undertow.io-threads:设置IO线程数,主要执行非阻塞的任务,它们会负责多个连接,默认设置每个CPU核心一个线程。
  5. server.undertow.worker-threads:阻塞任务线程池,当执行类似servlet请求阻塞IO操作时,undertow会从这个线程池中取得线程。它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8。
  6. server.undertow.buffer-size:每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可。

这些参数可以通过在Spring Boot的配置文件中进行设置来调整Undertow的性能和行为。请注意,具体参数可能会根据Undertow的版本和配置有所不同。在调整这些参数时,建议仔细阅读相关文档并进行适当的测试,以确保最佳的性能和稳定性。

在这里插入图片描述

Undertow架构设计

Undertow的架构设计是组合式的,可以通过组合各种小型的目的单一的处理程序来构建Web服务器。这种设计使得Undertow非常灵活,可以选择完整的Java EE servlet 3.1容器或初级非阻塞程序处理。

Undertow的设计目标是完全可嵌入的,具有简单易用的编译接口。其生命周期完全由嵌入的应用程序控制。在Undertow中,没有任何容器的概念,应用程序是由多个处理程序组合而来的,通过嵌入的方式来管理所有这些处理程序的生命周期。

Undertow基于Java XNIO,这是一个对JDK NIO类的扩展,与netty的基本功能类似。但相较于后者,Undertow更像是扩展封装。Undertow的核心瓶子在1Mb以下,它在运行时也是轻量级的,具有一个简单的嵌入式服务器使用少于4Mb的堆空间。

Undertow支持对Web套接字的全面支持,包括JSR-356支持,也提供对Servlet 3.1的支持,包括对嵌入式servlet的支持。它还可以在同一部署中混合Servlet和本机Undertow非阻塞处理程序。

在这里插入图片描述

Java使用Undertow示例

以下是一个简单的Java使用Undertow的示例:

  1. 添加Undertow依赖

在项目的pom.xml文件中添加Undertow的依赖:

<dependency>
    <groupId>io.undertow</groupId>
    <artifactId>undertow-core</artifactId>
    <version>2.0.15.Final</version>
</dependency>
  1. 创建Undertow服务器

创建一个Undertow服务器实例:

Undertow server = Undertow.builder()
        .addHttpListener(8080, "localhost")
        .setHandler(new HttpHandler() {
            @Override
            public void handleRequest(HttpServerRequest request, HttpServerResponse response) throws Exception {
                response.setStatusCode(200);
                response.getOutputStream().write("Hello, Undertow!".getBytes());
                response.getOutputStream().flush();
            }
        })
        .build();

上述代码创建了一个监听8080端口的Undertow服务器,并设置了一个简单的请求处理程序,将响应码设置为200,并将响应内容为"Hello, Undertow!"。

  1. 启动Undertow服务器

启动Undertow服务器:

server.start();
  1. 停止Undertow服务器

当需要停止Undertow服务器时,可以调用stop()方法:

server.stop();

这就是一个简单的Java使用Undertow的示例,通过它你可以开始使用Undertow进行Web开发。请注意,这只是一个基本的示例,实际使用中可能需要根据具体需求进行更复杂的配置和开发。

在这里插入图片描述

Tomcat与Netty比较

OpenSergo使用详解

Kafka集群详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1433628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

乐意购项目前端开发 #6

一、商品详情页面 代码模版 创建Detail文件夹, 然后创建index.vue文件 <script setup> import { getDetail } from "/api/goods/index"; import { ref, onMounted } from "vue"; import { useRoute } from "vue-router"; import { useCar…

手写分布式存储系统v0.3版本

引言 承接 手写分布式存储系统v0.2版本 &#xff0c;今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的&#xff0c;那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是&#xff0c;张三家…

《大魔界村》中的人物性格——亚瑟

《大魔界村》作为一款经典的街机动作游戏,其主角——勇敢的骑士亚瑟,以其独特的性格特点和坚定的信念,在玩家心中留下了深刻印象。本文将深入探讨亚瑟这一角色的性格特质,通过分析他在游戏中的行为表现及决策过程,展现他身上的勇气、坚韧与智慧三大要点。 一、无畏挑战的…

全套电气自动化样例图纸分享,使用SuperWorks自动化版免费设计软件!

今天给大家分享一套完备的电气自动化样例图纸&#xff0c;结构准确、内容清晰&#xff0c;适合初学者入门操作练习。 整套图纸包含图纸目录、原理图、端子列表、连接列表、元件列表、接线图&#xff0c;具有较高的参考价值&#xff0c;请大家点击自行下载文件&#xff01; 1e8…

【51单片机】直流电机实验和步进电机实验

目录 直流电机实验直流电机介绍ULN2003 芯片介绍硬件设计软件设计实验现象 步进电机实验步进电机简介步进电机的工作原理步进电机极性区分双极性步进电机驱动原理单极性步进电机驱动原理细分驱动原理 28BYJ-48 步进电机简介软件设计 橙色 直流电机实验 在未学习 PWM 之前&…

出海企业应用CRM系统可行吗?有哪些好处?

近年来许多企业都涌现出了出海需求&#xff0c;在不同国家设置了办事处。企业在管理业务和客户时&#xff0c;不可避免用到CRM管理系统。对于这样的跨国企业&#xff0c;是否有一个CRM系统可以满足其需求&#xff1f;——答案是有的&#xff0c;这篇文章将为您介绍跨国协作CRM的…

Palworld幻兽帕鲁自建服务器32人联机开黑!

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

Java实现康复中心管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

vue项目中的 package.json 的文件是什么

在 Vue.js 项目中&#xff0c;package.json 文件是一个 JSON 文件&#xff0c;用于存储项目的元数据和依赖关系。这个文件应该位于项目的根目录下。 以下是一个简单的 package.json 文件示例&#xff1a; {"name": "my-vue-project","version"…

MySQL进阶45讲【10】MySQL为什么有时候会选错索引?

1 前言 前面我们介绍过索引&#xff0c;在MySQL中一张表其实是可以支持多个索引的。但是&#xff0c;写SQL语句的时候&#xff0c;并没有主动指定使用哪个索引。也就是说&#xff0c;使用哪个索引是由MySQL来确定的。 大家有没有碰到过这种情况&#xff0c;一条本来可以执行得…

【爬虫实战】全过程详细讲解如何使用python获取抖音评论,包括二级评论

简介&#xff1a; 前两天&#xff0c;TaoTao发布了一篇关于“获取抖音评论”的文章。但是之前的那一篇包涵的代码呢仅仅只能获取一级评论。虽然说抖音的一级评论挺精彩的了&#xff0c;但是其实二级评论更加有意思&#xff0c;同时二级评论的数量是很多。所以二级评论是非常值…

springboot整合rabbitmq,及各类型交换机详解

RabbitMQ交换机&#xff1a; 一.交换机的作用 如果直接发送信息给一条队列&#xff0c;而这一消息需要多个队列的的多个消费者共同执行&#xff0c;可此时只会有一个队列的一个消费者接收该消息并处理&#xff0c;其他队列的消费者无法获取消息并执行。所以此时就需要交换机接…

c++ 语法多态

多态分为两类 静态多态&#xff1a;函数重载和运算符重载属于静态多态复用函数名 动态多态&#xff1a; 派生类和虚函数实现运行时多态。 静态多态和动态多态区别 静态多态的函数地址早绑定&#xff1a;编译阶段确定函数地址 动态多态函数地址晚绑定&#xff1a;运行阶段确…

esp8266 步骤

安装驱动 http://arduino.esp8266.com/stable/package_esp8266com_index.json oled库 esp8266-oled-ssd1306

01-Datahub是什么?

Datahub是LinkedIn开源的基于现代数据栈的元数据管理平台&#xff0c;原来叫做WhereHows 。经过一段时间的发展datahub于2020年2月在Github开源。 官网地址为&#xff1a;A Metadata Platform for the Modern Data Stack | DataHub 源码地址为&#xff1a;GitHub - datahub-p…

飞天使-k8s知识点12-kubernetes散装知识点1-架构有状态

文章目录 k8s架构图有状态和无状态服务 资源和对象对象规约和状态 资源的对象-资源的分类 k8s架构图 有状态和无状态服务 区分有状态和无状态服务有利于维护yaml文件 因为配置不同资源和对象 命令行yaml来定义对象对象规约和状态 规约 spec 描述对象的期望状态状态 status 对…

ArcGIS学习(三)数据可视化

ArcGIS学习(三)数据可视化 1.矢量数据可视化 需要提前说明的是,在ArcGIS中,所有的可视化选项设置都是在“图层属性”对话框里面的“符号系统”中实现的。 对于矢量数据的可视化,主要有四种可视化方式: 按“要素”可视化按“类别”可视化按“数量”可视化按“图表”可视…

【证书管理】实验报告

证书管理实验 【实验环境】 ISES客户端 【实验步骤】 查看证书 查看证书详细信息 选择任意证书状态&#xff0c;在下方“证书列表”中出现符合要求的所有证书。在“证书列表”中点击要查看证书&#xff0c;在右侧“证书详细信息”栏出现被选证书信息。 上述操作如图1.2.…

PS一键磨皮插件Delicious Retouch for mac中文 支持PS2024

Delicious Retouch for Mac是一款优秀的Photoshop插件&#xff0c;专注于人像修饰。以下是该插件的一些主要特点和功能&#xff1a; 软件下载&#xff1a;Delicious Retouch for mac中文 支持PS2024 人像修饰工具&#xff1a;Delicious Retouch专注于人像修饰&#xff0c;提供了…

编程实例分享,物流车辆调度管理系统软件教程

编程实例分享&#xff0c;物流车辆调度管理系统软件教程 一、前言 以下教程以 佳易王物流车辆调度管理系统软件V16.0为例说明 如上图&#xff0c;左侧为 导航栏&#xff0c;在系统设置里可以设置打印参数 如上图&#xff0c;填写托运方&#xff0c;货物&#xff0c;司机等信…