天天看点

图解WildFly8之Servlet容器Undertow剖析

Undertow简介

Undertow 是RedHat(红帽公司)的开源产品,采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。

WildFly8的默认Servlet容器采用的不是Tomcat,也不是Jetty,而是JBoss自己开源的Undertow,Undertow是用Java编写的性能灵活的Servlet容器,底层基于高性能的NIO框架XNIO,XNIO也是JBoss开源的产品,JBoss开源的高性能NIO框架还有一个很有名:Netty。Undertow在WildFly8中的角色如图:

Undertow的架构类似于Jetty,采用应用内嵌的方式,这也正是为什么说它有灵活的性能的原因,利用Undertow可以快速构建一个小巧的应用服务,实现代码如下:

从源代码,我们可以抽象出Undertow生成应用的架构,如图所示

图解WildFly8之Servlet容器Undertow剖析

利用运行调试,我们可以更加深入地了解Undertow中的一些概念:

ServletInfo:Servlet的最小单位,是对javax.servlet.Servlet具体实现的再次封装

FilterInfo:过滤器封装

DeploymentInfo:包布署对象,包含多个ServletInfo,可以说是ServletInfo的集合

ServletContainer:容器,用来管理DeploymentInfo,一个容器可以添加多个DeploymentInfo

DeploymentManager:包布署的管理,是对添加到ServletContainer的DeploymentInfo的一个引用,用于运行发布和启动容器

HttpHandler:servlet path处理器,DeploymentManager启动后返回的Servlet处理器,通常是HttpContinueReadHandler(连续读处理器)

PathHandler:分发器,将用户请求分发给对应的HttpHandler

HttpServerExchange:数据交换封装,可以转换成ServletRequest和ServletResponse

示例代码的调试运行栈如下:

图解WildFly8之Servlet容器Undertow剖析

连接通道

图解WildFly8之Servlet容器Undertow剖析

作为Servlet协议协议转换的实体HttpServerExchange的结构如下:

图解WildFly8之Servlet容器Undertow剖析

Undertow的性能

图解WildFly8之Servlet容器Undertow剖析

继续阅读