天天看點

圖解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剖析

繼續閱讀