进入Undertow Web服务器

随着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服务器,请从管理控制台中选择“配置文件”选项卡,然后移至“ 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 ”面板。 如您所见,“默认”工作程序已经存在。 您可以随时单击相应的按钮来创建或删除新的。 但是,现在我们将单击“ 编辑 ”链接,以便我们自定义要在默认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

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

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

相关文章

centos 重启网卡_CentOS6 网络管理之网卡配置及简单路由设置

CentOS6中关于网络配置的命令有很多&#xff0c;本文将介绍几个平时最长用的几个命令&#xff0c;以及网卡IP地址的配置和简单路由配置。1、经常使用的查看IP地址命令为 ifconfig&#xff0c;不跟参数的情况下默认查看所有已启用的网卡信息&#xff0c;如下图所示&#xff1a;如…

绝地求生 android版支持蓝牙吗,《绝地求生》吃鸡必须要顶配吗?这些配置也能畅玩...

导读《绝地求生》火爆之余&#xff0c;很多人在想要加入这款游戏时&#xff0c;却被游戏传闻中的超高配置要求给吓到了&#xff0c;然后心生退意。事实上&#xff0c;吃鸡的配置要求真的这么高吗&#xff1f;其实并不是&#xff01;传言1&#xff1a;8G内存不能玩这则传言的说法…

《美团机器学习实践》高清PDF+思维导图+美团算法团队

在美团的搜索、推荐、计算广告、风控、图像处理等领域&#xff0c;相关的人工智能技术得到广泛的应用。《美团机器学习实践》包括通用流程、数据挖掘、搜索和推荐、计算广告、深度学习以及算法工程6大部分内容&#xff0c;全面介绍了美团在多个重要方面对机器学习的应用。通过本…

Java 8中的java.util.Random

Java 8中java.util.Random类的简洁功能之一是对其进行了改进&#xff0c;现在可以返回随机的数字流 。 例如&#xff0c;要生成一个介于0&#xff08;含&#xff09;和1&#xff08;不含&#xff09;之间的随机双精度数的无限流&#xff1a; Random random new Random(); Do…

appium判断元素是否存在_Python+selenium自动化之判定元素是否存在

在测试过程中&#xff0c;我碰到过这类的问题&#xff0c;使用find_element却找不到某个元素而产生异常&#xff0c;这就需要在操作某个元素之前判定该元素是否存在&#xff0c;而selenium中没有判定元素是否存在的方法&#xff0c;或者判定相同的元素有几个&#xff0c;需要操…

棋盘DP三连——洛谷 P1004 方格取数 洛谷 P1006 传纸条 Codevs 2853 方格游戏

P1004 方格取数 题目描述 设有N $\times N$NN的方格图(N $\le 9$)(N≤9)&#xff0c;我们将其中的某些方格中填入正整数&#xff0c;而其他的方格中则放入数字00。如下图所示&#xff08;见样例&#xff09;: A0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 …

html一张图片用两种滤镜,HTML图片CSS滤镜—灰度效果

this.p{ m:2,b:2,loftPermalink:,id:fks_082065087087086069087082087095083084084067083083082065,blogTitle:HTML图片CSS滤镜—灰度效果,blogAbstract: ,blogTag:html,blogUrl:blog/static/72507542200941384735902,isPublished:1,istop:false,type:2,modifyTime:13288029920…

怎么通过media foundation将图像数据写入虚拟摄像头_千倍成本压缩!特斯拉开发虚拟激光雷达,替代最贵自动驾驶传感器...

「谁用激光雷达&#xff0c;谁完蛋&#xff01;」在去年特斯拉举办的 Autonomy Day 上&#xff0c;特斯拉 CEO Elon Musk 言辞激烈地炮轰激光雷达。「昂贵的传感器是不必要的&#xff0c;这就像是一大堆昂贵的附属品。」「像阑尾一样。一个阑尾不好——那么&#xff0c;一大堆阑…

使用Drools 6.0进行部署

KieScanner 6.0 KieScanner取代了5.x KnowledgeAgent。 它使用嵌入式Maven允许在运行时解析和检索jar。 6.0应用程序现在可以轻松支持依赖关系和可传递依赖关系&#xff1b; 使用众所周知的Maven语义进行版本控制。 它允许在类路径上进行部署&#xff0c;也可以在运行时动态进行…

activemq安装与配置_ActiveMQ(消息队列)从入门到了解

一、 ActiveMQ 简介 1 什么是 ActiveMQ ActiveMQ 是 Apache 出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现&#xff0c;尽管 JMS 规范出台已经是很久 的事情了&#xff0c;但是 JMS 在当…

智联招聘简历如何导出html,如何将拉勾网(智联招聘)的预览简历导出来

最近在整理简历的时候发现拉勾网/智联招聘上面的预览简历是那么简洁漂亮&#xff0c;可是当我想把他导到本地&#xff0c;发pdf文件给企业时却只能是word&#xff0c;那么的难看&#xff0c;摸索了一会儿找到了一种比较好的方法可以得到预览的简历。1.另存为html文件在这里插入…

Java反编译器的剖析

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

wps单机无网络版_单平台销量破百万,这个国产单机系列要出网游,还要上主机...

他们想做"国际顶级的单机游戏开发商"。文/彭子诚作为一款国产单机游戏&#xff0c;《古剑奇谭三》在去年年底上市后&#xff0c;至今在 Steam 上依然保持着 83% 的好评率。大量的玩家对于游戏内容给出了认可&#xff0c;“用心”这个词是最高频出现的词语。Wegame 官…

JavaFX 8的弹出式编辑器

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

flex实现水平居中和两栏布局

<!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title>水平垂直的实现</title><style>.wrapper{width:25…

opencv 多线程加速_线程池给你写好了,想加速拿来用就行哈

图像拼接实现见&#xff1a;OpenCV源码系列|图像拼接1OpenCV源码系列|图像拼接2耗时在调用函数&#xff1a;Mat pano; Ptr stitcher Stitcher::create(mode); Stitcher::Status status stitcher->stitch(imgs, pano)能否将这一步放进线程池里进行加速呢&#xff1f;1. 测试…

poping 心法

音乐 01.Eamon - (How Could You) Bring Him Home02.The Pussycat Dolls - Buttons03.Most Wanted ft. Fingazz, Volture -From Juvi To The Penitentiary (Instrumental)04.Kaila Yu - Move05.Danity Kane - Show Stopper06.Slick Dogg - Bang On m07.Danity Kane - Show Stop…

html5 video修改默认样式,HTML5中将video设置为背景的方法

主要用到了video标签&#xff0c;css样式&#xff0c;原理是先将video标签利用position:fixed;使video标签脱离文档流&#xff0c;在将他的z-index设置为最低的&#xff0c;比如-9999。再插入的内容自然就覆盖在视频上面了。1.首先&#xff0c;将video插入到网页中&#xff0c;…

ES6语法的学习与实践

ES6是JavaScript语言的新一代标准&#xff0c;是ECMAScript的第六个版本&#xff0c;加入了很多新的功能和语法&#xff0c;在很多框架&#xff0c;如在使用Vue,React等框架的项目中一般都采用ES6语法来编写的&#xff0c;下面对经常用到的ES6语法做简要的介绍。 1.let,const l…

这是一次 docker 入门实践

前言 其实接触 docker 也有一段时间了&#xff0c;但是一直没有做下总结&#xff0c;现在网上关于 docker 的介绍也有很多了&#xff0c;本着好记性不如烂笔头的原则&#xff0c;还是自己再记录一波吧。 实现目标 安装 docker ce 探索 docker 基本概念及用法环境准备 Centos7 6…