进入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,一经查实,立即删除!

相关文章

HTTPHandler有什么作用

一 asp.net请求的处理过程&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;Http…

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;全面介绍了美团在多个重要方面对机器学习的应用。通过本…

如何使用HttpModule来实现我们日常的应用:

1、向每个页面动态添加一些备注或说明性的文字&#xff1a; 有的网站每一个页面都会弹出一个广告或在每个页面都以注释形式&#xff08;<!-- -->&#xff09;加入网站的版权信息。如果在每个页面教编写这样的JS代码的话&#xff0c;对于大一点的网站&#xff…

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…

将动态aspx页面转换成为静态html页面的几种方法

1. 模版法 该方法历史悠久&#xff0c;具体处理流程为采用一个html模版&#xff0c;将其中的关键字替换为我们希望的信息。 优点: 缺点: 所有的信息都要采取字符串批凑的方式来实现&#xff0c;比如需要一个列表&#xff0c;就需要拼凑字符串。问题是开发周期长&…

SSH协议详解

简介 SSH只是一个协议&#xff0c;基于这个协议有不同的实现&#xff0c;这些实现中有开源&#xff0c;也有收费。 原理 普通网络通信一般是明文通信&#xff0c;数据容易被中间人拦截并且解析&#xff0c;而SSH协议则提供了基于内容加密服务。 流程&#xff1a; 第一种&#x…

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

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

JBoss Fuse 6.1 + HawtIO第一部分

它是开源的&#xff01; JBoss Fuse是开源ESB &#xff0c;是Red Hat收购FuseSource之后Fuse ESB的发展。 它是开源的 &#xff0c; Apache v2许可的 &#xff0c; 并由Red Hat完全支持 。 最好的部分之一是&#xff0c;您可以免费下载并使用它&#xff0c;并且在生产或订阅中支…

html5新增的js api,对HTML5新增JS Api的思考

1.为什么javascript的变量名不使用css中的命名方法&#xff0c;而选择使用驼峰命名法因为在javascript中“-”表示减法&#xff0c;所以如果使用“-”的话会出现不必要的问题。2.在javascript中已经有className方法添加类名&#xff0c;为什么还要新增加classList.add方法因为c…

什么是URL转发和一个IP建多个Web站点--主机头名法

什么是URL转发&#xff1f; 所谓 URL 转发&#xff0c;是中企资源对在中企资源注册的域名&#xff0c;所提供的一项特别的域名增值服务&#xff0c;此服务是通过中企资源服务器的特殊技术设置&#xff0c;实现当访问您的域名时&#xff0c;将会自动跳转到您所指定的另一个网络地…

eval()

eval() 接收一个字符串&#xff0c;这个字符串必须是一个表达式&#xff0c;然后执行并返回表达式的值 In [6]: x 7In [7]: eval(3 x) Out[7]: 10 In [8]: eval(pow(2, 3)) Out[8]: 8 In [9]: eval(2 3) Out[9]: 5 转载于:https://www.cnblogs.com/pzk7788/p/10264105.h…

ajax html页面传参数,jQuery AJAX:如何将大型HTML标记作为参数传递?

如何使用jQuery AJAX将大型HTML标记数据传递给我的PHP&#xff1f;当我收到结果时&#xff0c;这是错误的。jQuery AJAX代码&#xff1a;$(#saveButton).click(function() {// do AJAX and store tree structure to a PHP array//(to be saved later in database)var treeInner…

使用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 在当…

httpHandlers和httpModules接口介绍 (5)

IHttpHandler工厂 class TestHandlerFactory : IHttpHandlerFactory{public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated){string fname url.Substring(url.IndexOf(/) 1);while (fname.IndexOf(/) ! -1)fname …