`
gaotong1991
  • 浏览: 93027 次
  • 来自: 北京
社区版块
存档分类
最新评论

高性能非阻塞Web 服务器Undertow

阅读更多

概述

WildFly 8 包含了一个全新的Web服务器(Undertow),WildFly 8 默认的Web服务器为Undertow。一句话概括什么是Undertow - 高性能非阻塞 Web 服务器。Undertow 主要有以下几个特点:

 

  • 轻量化 - Undertow 是一个Web 服务器,但它不像传统的Web 服务器有容器的概念,它由两个核心jar包组成,使用API加载一个Web应用可以使用小于10MB的内存
  • HTTP Upgrade 支持 - 设计WildFly时一个重要的考虑因素是在云环境中减少端口数量的需求。在云环境中,一个系统可能运行了几百个甚至几千个WildFly实例。基于HTTP使用HTTP Upgrade可以升级成多种协议,Undertow提供了复用这些协议的能力。
  • Web Socket 支持 - 对Web Socket的完全支持,用以满足Web应用现在面对巨大数量的客户端,以及对JSR-356规范的支持
  • Servlet 3.1 的支持 - Undertow支持Servlet 3.1,提供了一个机会来构建一个超越Servlet规范、对开发人员非常友好的系统。
  • 可嵌套性 - Web 服务器不在需要容器,我们只需要通过API在J2SE代码下快速搭建Web服务

 

相关链接及快速开始示例

Undertow 社区主页(http://undertow.io/):包括Undertow相关的所有新闻,消息。

Undertow 源代码(https://github.com/undertow-io/):包括所有Undertow相关的代码

Undertow 快速开始示例(https://github.com/kylinsoong/wildfly-architecture/tree/master/undertow/quickstart):包括Undertow 快速开始示例,本示例演示了如何使用Undertow,将Undertow整合到自己的应用中。Undertow编程使用的第一步是添加如下依赖到应用:

		<dependency>
			<groupId>io.undertow</groupId>
			<artifactId>undertow-core</artifactId>
			<version>1.0.0.Final</version>
		</dependency>
		<dependency>
			<groupId>io.undertow</groupId>
			<artifactId>undertow-servlet</artifactId>
			<version>1.0.0.Final</version>
		</dependency>

 使用软件资料安装和下载章节中所描述方法使用Git下载quickstart应用。下载完成后使用如下命令编译

 

mvn clean install dependency:copy-dependencies  

 

编译完成或生成undertow-quickstart.jar包位于target目录下,运行时所有依赖包位于target/dependency目录下。

Undertow Hello World 示例

Undertow是一个高性能非阻塞 Web 服务器,接下来我们演示如何创建一个Web 服务器,如下为HelloWorldServer类代码明细:

public class HelloWorldServer {

	public static void main(String[] args) {
		Undertow server = Undertow.builder().addHttpListener(8080, "localhost").setHandler(new HttpHandler(){

					public void handleRequest(HttpServerExchange exchange)throws Exception {
						exchange.getRequestHeaders().put(Headers.CONTENT_TYPE, "text/plain");
						exchange.getResponseSender().send("Hello World");
					}
				}).build();
		server.start();
	}

}

 通过如下方法可以运行HelloWorldServer:

java -cp target/dependency/*:target/undertow-quickstart.jar org.wildfly.undertow.quickstart.HelloWorldServer

 

运行后打开浏览器输入http://localhost:8080,则页面输出“Hello World”字符串。如上面,我们演示Undertow Web 服务器使用异步IO的方式向界面输出字符串。

Undertow 部署Servlet示例

Web 服务器主要是部署运行Web应用,接下来我们演示如何在Undertow 中通过API部署两个Servlet(MyServlet,MessageServlet),然后分别访问这两个Servlet。两个Servlet代码明细分别如下:

MessageServlet 类代码

public class MessageServlet extends HttpServlet {

	private static final long serialVersionUID = 6861632231065498153L;

    private static final String message = "This is MessageServlet";
    
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter writer = resp.getWriter();
        writer.write(message);
        writer.close();
	}
    
}

 

MyServlet 类代码

public class MyServlet extends HttpServlet {

	private static final long serialVersionUID = 2378494112650465478L;
	
	private static final String message = "This is MyServlet";

	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter writer = resp.getWriter();
        writer.write(message);
        writer.close();
	}
	
}

 接下来我们使用Undertow提供的API,启动Web服务器,部署这两个Servlet,相关的ServletServer类代码如下:

public class ServletServer {
	
	public static final String MYAPP = "/myapp";

	public static void main(String[] args) throws ServletException {
		
		DeploymentInfo servletBuilder = Servlets.deployment().setClassLoader(ServletServer.class.getClassLoader())
				                                             .setContextPath(MYAPP)
				                                             .setDeploymentName("myapp.war")
				                                             .addServlets(Servlets.servlet("MessageServlet", MessageServlet.class).addMappings("/messageServlet")
				                                            		    , Servlets.servlet("MyServlet", MyServlet.class).addMappings("/myServlet"));
		DeploymentManager manager = Servlets.defaultContainer().addDeployment(servletBuilder);
		manager.deploy();
		
		HttpHandler servletHandler = manager.start();
		PathHandler path = Handlers.path(Handlers.redirect(MYAPP)).addPrefixPath(MYAPP, servletHandler);
		
		Undertow server = Undertow.builder().addHttpListener(8080, "localhost").setHandler(path).build();
		server.start();
	}

}

 通过如下方法可以运行ServletServer,运行成功后访问http://localhost:8080/myapp/messageServlet,页面显示字符串“This is MessageServlet”;访问http://localhost:8080/myapp/myServlet,页面显示字符串“This is MyServlet”。

4
1
分享到:
评论
6 楼 从此醉 2014-02-27  
ahack 写道
jboss?

5 楼 yixiandave 2014-02-27  
wjs0702cn 写道
大侠能给一个测试对比么,告诉我们这个服务器和tomcat/jetty比较,性能有多大提升啊。

+1
4 楼 ahack 2014-02-27  
jboss?
3 楼 wjs0702cn 2014-02-27  
大侠能给一个测试对比么,告诉我们这个服务器和tomcat/jetty比较,性能有多大提升啊。
2 楼 hardPass 2014-02-27  
jetty tomcat 不都可以嵌入式的么
1 楼 freezingsky 2014-02-26  
这些不是从官方copy下来的吗?

相关推荐

    undertow,高性能无阻塞Web服务器.zip

    Undertow是一个基于非阻塞IO的Java Web服务器。它由几个不同的部分组成:

    undertow:高性能无阻塞Web服务器

    Undertow是基于非阻塞IO的Java Web服务器。 它由几个不同的部分组成: 支持阻塞和非阻塞IO的核心HTTP服务器 Servlet 4.0实现 符合JSR-356的Web套接字实现 网站: : 问题: : 项目负责人:Flavia Rainone ...

    undertow-2.2.18.Final.zip

    Undertow是一个高性能、轻量级的Java web服务器和Servlet容器,由Red Hat开发并维护。它是JBoss AS和WildFly应用服务器的核心组件之一。在2.2.18.Final版本中,Undertow提供了最新的功能更新和性能优化。 Undertow...

    undertow-2016.11.0.zip

    Undertow是一款轻量级、高性能的Java Web服务器和Servlet容器,由JBoss(现为Red Hat的一部分)开发并维护。这款服务器以事件驱动的方式构建,特别适合构建高并发、低延迟的Web应用。它提供了多种处理器,包括基于...

    undertow-examples-1.0.0.Alpha2.zip

    Undertow 是一个轻量级、高性能的Java Web服务器和Servlet容器,由JBoss(Red Hat)开发并维护。它提供了非阻塞I/O模型,使其在处理高并发请求时表现出色。这个压缩包可能包含了各种示例,帮助开发者理解和学习如何...

    sprintboot项目undertow替换tomcat方法

    - **并发处理**: Undertow是基于阻塞与非阻塞API设计的,可以更好地处理高并发场景,减少上下文切换,从而提升性能。 - **模块化**: Undertow支持多种模块,可以根据需要添加或移除特定模块,从而提高性能和灵活性。...

    undertow-parser-generator-1.0.0.Beta18.zip

    Undertow是Red Hat公司开发的一个高性能、轻量级的HTTP服务器和Servlet容器。它采用了非阻塞I/O模型,使得其在处理高并发请求时表现出色。而Undertow-parser-generator则是Undertow项目的一部分,它专注于生成解析器...

    undertow-core-1.0.0.Beta30.zip

    Undertow是JBoss(现在是Red Hat)开发的一款高性能、轻量级的Java web服务器和Servlet容器。这个Beta30版本包含了Undertow的主要组件和功能,用于构建可扩展的web应用。 【描述】中提到的"gradle-android-cq-...

    SMX:Undertow模组

    在IT领域, Undertow 是一个高性能的Java Web服务器和Servlet容器,由JBoss(Red Hat的一部分)开发并维护。它被设计为轻量级、可扩展且完全非阻塞的,能够处理高并发场景。SMX模组,可能是对Undertow进行特定定制或...

    proteus一个高性能的RESTJavaWeb和微服务框架

    它基于Undertow,这是一个由Red Hat开发的高性能Java web服务器和HTTP应用编程接口(API)。Proteus的设计理念在于提供简洁的API,使开发者能够快速地构建可扩展和高性能的服务。 ### Proteus框架的核心特性 1. **...

    undertow-servlet-1.0.0.Beta26.zip

    Undertow是由JBoss(Red Hat的一部分)开发的一款高性能、轻量级的Java web服务器和Servlet容器。它支持HTTP/2,WebSocket以及非阻塞I/O模型,使得其在处理高并发场景时表现出色。Undertow的主要特点包括模块化设计...

    switchBuiltInServers.rar

    2. **Undertow的特性**:Undertow是一个高性能的HTTP服务器和Servlet容器,其特点是使用异步事件驱动模型,这使得它在处理高并发请求时表现优异。此外,Undertow支持WebSocket和HTTP/2。 3. **Jetty的特性**:Jetty...

    Java_Spring Webflux课程代码.zip

    5. **非阻塞I/O与Web服务器** Spring WebFlux支持非阻塞I/O模型,如Netty、Undertow,这些服务器能更好地利用系统资源,特别是在处理大量并发连接时。Netty是一个异步事件驱动的网络应用程序框架,适用于高性能、低...

    wildfly-8.0.0.Final.zip

    wildfly-8.0.0.Final.zip 在大家还在适应JBoss更名为WildFly的时候,开发者并没有停...Undertow——一个新的、高性能Web服务器已经发布了beta版。Undertow支持阻塞式和非阻塞式I/O并且被WildFly用作默认的Web服务器。

    UndertowX

    8. **事件驱动**:Undertow基于Java NIO(非阻塞I/O)和EPOLL(Linux上的高性能I/O)事件模型,确保了低延迟和高效率。 如果`ShadowX`是指一个Python项目,通常Python有各种Web服务器选项,如Flask、Django等,但...

    HIS优雅不停机更新

    threads)以处理非阻塞任务,设置阻塞任务线程池(server.undertow.worker-threads),以及缓冲区相关参数,如buffer-size、buffers-per-region和direct-buffers,这些参数影响服务器的IO性能和内存管理。 4. **...

    Spring5 webFIux Demo

    Spring5 引入了 WebFlux 框架,这是一款反应式编程模型,用于构建非阻塞式的、高性能的 Web 应用程序。WebFlux 提供了一种全新的处理 HTTP 请求的方式,与传统的基于 Servlet 的 Web MVC 相比,它更适应现代云环境的...

    Spring Boot 整合 Netty + WebSocket 实时消息推送

    Netty则是一个高性能、异步事件驱动的网络应用程序框架,常用于构建高度可定制的网络服务器。当Spring Boot与Netty结合使用时,可以创建出高效、稳定的实时消息推送系统。 在"Spring Boot 整合 Netty + WebSocket ...

Global site tag (gtag.js) - Google Analytics