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生成應用的架構,如圖所示

利用運作調試,我們可以更加深入地了解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
示例代碼的調試運作棧如下:
連接配接通道
作為Servlet協定協定轉換的實體HttpServerExchange的結構如下:
Undertow的性能