undertow springboot,springboot undertow 优化

  undertow springboot,springboot undertow 优化

  

目录

跳靴中用下层逆流的坑本文实验的环境如下环境准备使用跳鞋2.2.11、跳鞋2.2.12、跳鞋2.2.13如果是生产采用了上述几个版本的斯林布需放弃雄猫,选择逆流吗?跳羚中的雄猫容器跳羚设置海底雄猫与逆流的优劣对比

 

  

springboot中用undertow的坑

场景:准备基于跳羚的静态资源实现mp4资源的播放,不同版本的跳羚下效果不一样,可能导致正常的资源不可用。本文测试了几个版本,也针对这种情况提出了解决建议,希望对你的工作有所帮助。

 

  众所周知,跳靴内置类网中间件,将网服务器管理权交给了容器。在使用时只需要进行申明即可。

  

本文实验的环境如下

windows 7 JDK 1.8 Eclipse maven 3。3 .9弹簧靴2.2。2.2牵引下的x。x

 

  

环境准备

第一步、配置专家环境

 

  项目xmlns= http://maven。阿帕奇。org/POM/4。0 .0 xmlns : xsi= http://www。w3。org/2001/XML schema-instance xsi :架构位置= http://maven。阿帕奇。org/POM/4。0 .0 http://maven.apache.org/xsd/maven-4.0.0.xsd模型版本4 .0 .0/模型版本groupIdcom.yelang/groupId artifactIdundertowdemo/artifactId版本0 .0 .1-快照/测试/名称描述逆流中间件测试/描述父groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-parent/artifact id version2.2.10.RELEASE/version相对路径//父依赖项依赖项groupIdorg.springframework.boot/groupId artifactId spring-boot-starter-web/artifactId!-移除掉默认支持的排除groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-Tomcat/artifact id/exclusion/exclusions/dependency!-添加逆流容器-依赖groupIdorg.springframework.boot/groupId artifact id spring-boot-starter-under flow/artifact id/dependency/dependencies/project第二步、配置申明

  # 开发环境配置服务器: #服务器的超文本传送协议端口,默认为8080端口: 8080服务器: #应用的访问路径精读

  text-path: / # undertow 配置 undertow: # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的 max-http-post-size: -1 # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理 # 每块buffer的空间大小,越小的空间被利用越充分 buffer-size: 512 # 是否分配的直接内存 direct-buffers: true threads: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 io: 8 # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载 worker: 256# # tomcat 配置# tomcat:# # tomcat的URI编码# uri-encoding: UTF-8# # tomcat最大线程数,默认为200# max-threads: 500# # Tomcat启动初始化的线程数,默认值25# min-spare-threads: 30第三步、静态资源映射

  

package com.yelang.config; import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 通用配置 * @author wzh */@Configurationpublic class ResourcesConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { /** 本地文件上传路径 */ registry.addResourceHandler("/profile/**").addResourceLocations("file:D:/wzh/uploadPath/"); /** swagger配置 */ registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); }}

以上代码标注了系统对外开放的静态资源,正常情况下,将资源拷贝到相应的目录下,就可以访问相应资源。

 

  http://localhost:8080/profile/2.mp4

  

 

  

 

  

使用springboot2.2.11、springboot2.2.12、springboot2.2.13

这三个版本正常mp4也会无法加载。估计是这几个版本存在一些设置。

 

  

 

  

如果是生产采用了上述几个版本的sringboot

如果需要对mp4等资源进行预览查看的话。

 

  建议如下:第一、调整springboot的版本,调整到支持的版本。第二、不再使用profile的方式提供视频资源,采用nginx等组件。第三、采用第三方文件系统。第四种、将undertow容器替换成tomcat等其他容器也可以。

  小调查:在你的生产环境中,是使用内置容器吗?使用undertow这种nio的容器的有多少?

  

 

  

springboot需放弃Tomcat,选择Undertow吗?

在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。

 

  同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于Tomcat,那我们如何使用Undertow技术呢?本文将为大家细细讲解。

  

 

  

SpringBoot中的Tomcat容器

SpringBoot可以说是目前最火的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来运行起来。

 

  在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。

  

 

  

SpringBoot设置Undertow

对于Tomcat技术,Java程序员应该都非常熟悉,它是Web应用最常用的容器技术。我们最早的开发的项目基本都是部署在Tomcat下运行,那除了Tomcat容器,SpringBoot中我们还可以使用什么容器技术呢?没错,就是题目中的Undertow容器技术。SrpingBoot已经完全继承了Undertow技术,我们只需要引入Undertow的依赖即可,如下图所示。

 

  

 

  

 

  配置好以后,我们启动应用程序,发现容器已经替换为Undertow。

  那我们为什么需要替换Tomcat为Undertow技术呢?

  

 

  

Tomcat与Undertow的优劣对比

Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP。Tomcat具有Web服务器特有的功能,包括 Tomcat管理和控制平台、安全局管理和Tomcat阀等。Tomcat本身包含了HTTP服务器,因此也可以视作单独的Web服务器。

 

  但是,Tomcat和ApacheHTTP服务器不是一个东西,ApacheHTTP服务器是用C语言实现的HTTP Web服务器。Tomcat是完全免费的,深受开发者的喜爱。

  

 

  Undertow是Red Hat公司的开源产品, 它完全采用Java语言开发,是一款灵活的高性能Web服务器,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发,可以直接嵌入到Java项目中使用。同时, Undertow完全支持Servlet和Web Socket,在高并发情况下表现非常出色。

  

 

  我们在相同机器配置下压测Tomcat和Undertow,得到的测试结果如下所示:

  QPS测试结果对比:

  Tomcat

  

 

  Undertow

  

 

  内存使用对比:

  Tomcat

  

 

  Undertow

  

 

  通过测试发现,在高并发系统中,Tomcat相对来说比较弱。在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow是最佳选择。

  最后

  SpingBoot中我们既可以使用Tomcat作为Http服务,也可以用Undertow来代替。Undertow在高并发业务场景中,性能优于Tomcat。所以,如果我们的系统是高并发请求,不妨使用一下Undertow,你会发现你的系统性能会得到很大的提升。

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: