undertow服务器分析_进入Undertow Web服务器

undertow服务器分析

随着Java EE 7的到来以及处理诸如Web Sockets API和HTTP升级(例如EJB over HTTP)之类的高级功能的要求,WildFly开发团队已经做出了重要决定。 在长期致力于JBoss Web服务器(Apache Tomcat的一个分支)之后,新版本的应用程序服务器现在基于名为Undertow的新Web服务器。

Undertow是一种基于Java的灵活,快速的Web服务器,它基于J2SE 新输入输出(NIO) API。 Undertow是围绕基于组合的体系结构设计的,该体系结构允许您通过组合称为处理程序的小型单个组件来构建功能全面的Web服务器。 这些处理程序链接在一起以形成功能齐全的Java EE servlet 3.1容器或嵌入在代码中的更简单的HTTP Process处理程序。

从下图中可以看到,一个处理程序链由几个单独的处理程序组成,这些处理程序最终会产生Servlet响应或错误,例如在找不到请求的Path的情况下:

1个

Undertow Web服务器还可以灵活地在非阻塞异步处理程序之间进行选择,以处理任务,或将请求委托给由线程池支持的阻塞处理程序。

现在,我们将了解Web服务器的配置,因此只需打开您的配置文件(任何独立的配置文件或domain.xml ),然后移动到默认情况下如下所示的“ undertow ”子系统即可:

<subsystem xmlns="urn:jboss:domain:undertow:1.0"><buffer-caches><buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10" /></buffer-caches><server name="default-server"><http-listener name="default" max-post-size="10485760" socket-binding="http" /><host name="default-host" alias="localhost"><location name="/" handler="welcome-content" /></host></server><servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only"><jsp-config /><persistent-sessions path="persistent-web-sessions" relative-to="jboss.server.data.dir" /></servlet-container><handlers><file name="welcome-content" path="${jboss.home.dir}/welcome-content" directory-listing="true" /></handlers>
</subsystem>

Undertow配置的关键要素之一是缓冲区缓存 。 缓冲区本质上是一个内存块,您可以在其中写入数据,然后可以在以后再次读取。 该内存块包装在NIO Buffer对象中,该对象提供了一组方法,可以更轻松地使用该内存块。 使用缓冲区的明显优势是内存访问比物理访问快得多。

除了Java NIO外,WildFly还大量使用XNIO( http://www.jboss.org/xnio ),它是一个低级I / O层,可在任何地方使用以简化NIO API的使用。 它解决了使用选择器的一些复杂性,以及对多播套接字和非套接字I / O(例如串行端口)缺乏NIO支持,同时仍保留了NIO中提供的所有功能。

为了管理Undertow Web服务器,请从管理控制台中选择Profile选项卡,然后移至Web面板。 其中包含一组标签,例如:

  • Web服务 :用于指定一些核心Web服务设置,例如WSDL主机和端口
  • Servlets :用于指定是否使用开发模式(默认为false),该模式允许即时重新加载JSP。
  • HTTP :用于配置Undertow HTTP连接器。 例如,您将从此处将Web服务器与IO资源池相关联
  • Undertow Core :用于将处理程序和过滤器与HTTP连接关联。

配置Web服务器池

如果您来自JBoss AS 7环境,则这是您配置的一部分,将进行更改。 在应用程序服务器的早期版本中,您曾经引用​​线程执行器来调整Web服务器的线程池。 另一方面,对于WildFly 8,您需要引用一个需要在IO子系统中创建的Worker元素。 让我们来看看如何做。 从左树菜单中展开“ 核心”选项,然后选择“ IO ”,如下图所示:

2

需要从主面板中选择“ Worker ”面板。 如您所见,“默认”工作程序已经存在。 您可以随时单击相应的按钮来创建或删除新的。 但是,现在我们将单击“ 编辑 ”链接,以便我们自定义默认工作线程中要使用的线程数。 单击链接后,我们将编辑以下属性:

3

第一个参数, 堆栈大小对应于Web服务器线程堆栈大小。 使用更大的线程堆栈大小,Web服务器将消耗更多资源,因此可以支持更少的用户。 任务keepalive (默认值为60)控制等待来自同一连接上的同一客户端的下一个请求的秒数。 使用Keep-Alives,浏览器可以在第一个请求之后消除每个请求的完整往返,通常将整个页面的加载时间减少了一半。

Io线程数与可用的Web服务器线程数相对应。 这是一个重要的调整参数,对于流量较高的Web应用程序,需要增加此参数。 任务最大线程数可以控制并发请求的最大数量。 如果您对IO Worker的配置满意,请单击“ 保存”

现在我们已经定义了Worker,我们将需要从Web服务器端引用它。 为此,从左侧的树菜单中展开Web子系统,然后选择HTTP选项。 在那里,您将能够配置一些HTTP服务器特有的属性:

4

单击表中包含的“ 默认 ”元素,并检查Worker元素是否与您的IO Worker关联。 工作人员也需要启用才能使用。 接下来,我们需要将HTTP侦听器与套接字绑定相关联(请从“常规配置”左侧菜单中选择“套接字绑定”选项,以检查您的配置可用的套接字绑定)。 最后,HTTP服务器也绑定到Java NIO 缓冲池实现,这将在下一节中讨论。

完成HTTP的工作程序配置后,Web服务器将使用其工作程序线程,这些线程根据以下条件命名: [工作程序名称]-[工作程序ID]。 从下图中可以看到,用户定义了一个名为“ custom ”的工作程序,该工作程序已通过JConsole实用程序的Threads部分进行监视(作为JDK标准版的一部分包含在内):

5

配置Web服务器缓冲池

正如我们所说,Undertow基于Java NIO API,并利用了J2SE的池

需要缓冲时,请使用java.nio.ByteBuffer

缓冲区是一个对象,其中包含一些要写入或刚刚读取的数据。 在NIO中添加Buffer对象标志着新库和原始I / O之间最显着的差异之一。 在面向流的I / O中,您曾经将数据直接写入Stream对象 ,或直接从Stream对象读取数据。 在NIO库中,所有数据都由Buffers处理。 读取数据时,会将其直接读取到缓冲区中。 写入数据时,会将其写入缓冲区。 每当您在NIO中访问数据时,您就将其拉出缓冲区。

可以通过选择“ 核心” |“底层”来配置Undertow IO缓冲池 IO左侧菜单,以及“ 缓冲池”选项,如下图所示:

6

单击“ 默认 ”缓冲池行,您将可以在其中配置以下元素:

每片缓冲区 此参数定义每个分片分配多少缓冲区。 切片用于处理大缓冲区的子部分,从而避免了处理整个缓冲区的开销

 

直接缓冲区 通过此选项,您可以选择是否将缓冲区设置为直接缓冲区。 直接缓冲区的特征是它们是在Java堆之外分配的。 因此,一旦分配,它们的内存地址在缓冲区的生命周期内是固定的。 拥有固定的内存地址会导致内核可以安全地直接访问它们,因此,可以在I / O操作中更有效地使用直接缓冲区
缓冲区大小 此选项使您可以定义java.nio.ByteBuffer的大小。 假设正在使用直接缓冲区,则如果需要最高性能,则默认的16kb缓冲区是最佳的(因为这对应于Linux上的默认套接字缓冲区大小)。

http://www.itbuzzpress.com/ 此摘录摘自“ Wildfly 8 Book ”,这是一本实用且易于理解的指南,讨论了最流行的开源Java应用程序服务器: JBoss Wildfily (从JBoss AS重命名)。 本书涵盖了这个新的令人兴奋的应用服务器版本的管理和管理方面的所有细节。 该书专门针对应用服务器的管理工具,为您介绍了所有最新的体系结构和性能更改。 您将从基本的服务器配置过渡到更高级的群集,JDBC连接,日志记录等技术。

翻译自: https://www.javacodegeeks.com/2014/01/entering-undertow-web-server.html

undertow服务器分析

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

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

相关文章

matlab中的rng函数

一、matlab中的随机函数有&#xff1a;rand、randn 1、rand&#xff08;&#xff09; 功能&#xff1a;生成0-1之间的伪随机数 e.g. rand(3) 生成一个3*3的0-1之间的伪随机数矩阵 2、randn&#xff08;&#xff09; 功能&#xff1a;生成标准正态分布的伪随机数(均值为0&am…

inf sup上下确界与 min, max 的区别

inf 是 infimum 的简称&#xff0c;sup 是 supremum 的简称。 使用 inf 或 sup 总能保证一个函数的 inf 或 sup 存在&#xff0c;而函数的 min 或 max 有时候不存在。 inf 的定义&#xff1a;一个集合最大的下界 下确界&#xff1a;infimum&#xff0c;简写为 inf&#xff08…

在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南

最近&#xff0c; Envoy已成为流行的网络组件。 马特克莱因&#xff08; Matt Klein &#xff09;在几年前写了一个博客&#xff0c;内容涉及Envoy的动态配置API&#xff0c;以及它如何成为Envoy的采用曲线向右移的原因之一。 他称该博客为“通用数据平面API”。 由于有许多其他…

java编译器分析_Java反编译器的剖析

java编译器分析简单地说&#xff0c;反编译器尝试将源代码转换为目标代码。 但是有很多有趣的复杂性-Java源代码是结构化的&#xff1b; 字节码当然不是。 而且&#xff0c;转换不是一对一的&#xff1a;两个不同的Java程序可能会产生相同的字节码。 我们需要应用试探法以合理地…

各种各样的数

数的类别 数可以被分类为数系的集合内。对于以符号表示数的不同方式&#xff0c;则请看记数系统。 自然数 主条目&#xff1a;自然数 最常用的数为自然数&#xff0c;有些人指正整数&#xff0c;有些人则指非负整数。前者多在数论中被使用&#xff0c;而在集合论和计算机科学…

JDK 11上的JavaFX

在第11版发布之后&#xff0c;人们对JavaFX与JDK的解耦感到百感交集。 我们中的许多人认为现在是时候告别JavaFX并改用另一种GUI技术了&#xff0c;而另一些人对此情况感到高兴。 他们认为&#xff0c;将JavaFX与Oracle分离开来&#xff0c;并致力于将其开发为开源社区驱动的项…

HMM(隐马尔可夫模型)

1.什么是熵(Entropy) 简单来说&#xff0c;熵是表示物质系统状态的一种度量&#xff0c;用它老表征系统的无序程度。熵越大&#xff0c;系统越无序&#xff0c;意味着系统结构和运动的不确定和无规则&#xff1b;反之&#xff0c;&#xff0c;熵越小&#xff0c;系统越有序&am…

Java NIO教程

1.简介 Java NIO是从Java 1.4引入的库。 自从Java NIO推出以来&#xff0c;它提供了另一种方法来处理I / O和网络事务。 它被认为是Java网络和Java IO库的替代方法。 开发Java NIO的目的是使输入和输出的事务异步和非阻塞。 阻塞和非阻塞IO的概念将在后面的部分中介绍。 目录…

关于判断函数凸或凹以及最优化的问题

大部分情况下都转换为凸优化问题&#xff0c;并通过最优化方法来求解&#xff0c;因此了解相关知识就显得尤为重要了。 主要内容&#xff1a; 问题引出凸集凸函数凸优化最优化 1、问题引出 在n维空间中&#xff0c;对于任意两个点&#xff0c;对于0<μ<1&#xff0c;…

javafx弹出式窗口_JavaFX 8的弹出式编辑器

javafx弹出式窗口在过去的几个月中&#xff0c;我很高兴与JavaFX 8一起使用&#xff0c;以便为计划和调度应用程序实现复杂的用户界面。 所需的功能之一是执行“就地”编辑的方法&#xff0c;即快速编辑用户选择对象的某些基本属性的方法。 遵循“如果您无法创新&#xff0c;就…

随机访问MAC协议 知识梳理(ALOHA,CSMA,CSMA/CD,CSMA/CA)

0、随机访问MAC的协议 数据链路层动态随机分配信道时对随机访问MAC协议&#xff1a;ALOHA&#xff0c;CSMA&#xff0c;CSMA/CD&#xff0c;CSMA/CA ALOHA&#xff0c;CSMA&#xff0c;CSMA/CD的区别仅在于是否对信道进行监听和是否有碰撞检测&#xff1a; 1、ALOHA&#xf…

认识CUBA平台的CLI

毫无疑问&#xff0c;软件开发人员&#xff08;尤其是Java开发人员&#xff09;的世界充满了键盘狂热者&#xff0c;最好是一次单击即可键入10-15个字母。 而且我们的社区也不例外&#xff0c;因此经常有人问我们“如何在没有CUBA Studio的情况下启动项目&#xff1f;”之类的问…

将matlab中数据输出保存为txt或dat格式

一、将matlab中数据输出保存为txt或dat格式的三种方法。 第一种方法&#xff1a;save&#xff08;最简单基本的&#xff09; 具体的命令是&#xff1a;用save *.txt -ascii x x为变量 *.txt为文件名,该文件存储于当前工作目录下&#xff0c;再打开就可以打开后,数据有可能是以…

马尔可夫链笔记

1 引言 之前学习了伯努利过程和泊松过程&#xff0c;它们是无记忆性&#xff0c;不依赖于过去的状态&#xff0c;今天学习了马尔可夫链&#xff0c;它会依赖于过去的过程&#xff0c;更准确的说是依赖于过去的某种状态。 2 离散时间的马尔可夫链&#xff08;Markov Chain, MC…

「协方差」与「相关系数」的概念

一、协方差&#xff1a; 可以通俗的理解为&#xff1a;两个变量在变化过程中是同方向变化&#xff1f;还是反方向变化&#xff1f;同向或反向程度如何&#xff1f; 你变大&#xff0c;同时我也变大&#xff0c;说明两个变量是同向变化的&#xff0c;这时协方差就是正的。 你…

垃圾收集 java_关于Java垃圾收集

垃圾收集 java本文讨论的是使用的最流行的框架之一带来的开销–我敢打赌&#xff0c;几乎没有应用程序不使用java.util.Collections。 本文基于以下事实&#xff1a;框架为例如集合的初始大小提供了默认值。 因此&#xff0c;我们有一个假设&#xff0c;即大多数人不会费心地自…

Latex \bibliographystyle+修改字体字号的大小

1. bibliography style LaTeX 标准选项及其样式共有以下8种&#xff1a; plain &#xff0c;按字母的顺序排列&#xff0c;比较次序为作者、年度和标题. unsrt &#xff0c;样式同plain&#xff0c;只是按照引用的先后排序. alpha &#xff0c;用作者名首字母年份后两位作标号…

boxplot

1. 简介 箱形图&#xff0c;又称为盒须图、盒式图、盒状图或箱线图&#xff0c;是一种用作显示一组数据分散情况资料的统计图。箱形图于1977年由美国著名统计学家约翰图基&#xff08;John Tukey&#xff09;发明。它能显示出一组数据的最大值、最小值、中位数、上下四分位数及…

Java 11的期望

过去的几年对Java世界一直是动荡不安的&#xff0c;在相当多的发行版中添加了各种各样的功能。 在开发人员社区中&#xff0c;人们逐渐意识到Java的开发速度不够快。 在最初的20年中&#xff0c;Java平台和Java开发工具包&#xff08;JDK&#xff09;经历了庞大&#xff0c;不…

martingale与Markov Process的关系

鞅过程与马尔科夫过程是什么关系&#xff1f; 1.鞅代表的是公平游戏&#xff0c;马尔可夫过程侧重过程无记忆性 总而言之&#xff1a;鞅和马尔可夫过程没有包含的关系。因为鞅代表的是公平游戏&#xff0c;而马尔可夫过程侧重过程无记忆性。两者没有内在联系。 注&#xff1…