Undertow服务器基础分析 - 概述

Undertow作为JBoss应用服务器内置的Web容器,旨在提供更高效、灵活的服务。相较于Tomcat,它满足了微服务架构的需求,并支持WebSocket协议及NIO技术。Undertow在性能测试中表现出色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Undertow是JBoss开源组织旗下一款Web服务器的名称,随着Wildfly(原JBossAS)版本8,一并发布出来,是内置缺省的Web容器。我们知道JBoss应用服务器之前一直使用Tomcat作为Web容器,而Web容器可以说是应用服务器中最重要的模块之一,所以这个改变引起开发者的广泛关注。

为什么要重新设计一款新的Web服务器呢?官网FAQ给出一个说明:
“Before we created Undertow we needed multiple web server technologies to meet our needs. Undertow was designed to be flexible and efficient enough to meet every use case we had and every use case we could think of. Undertow is embeddable and easy to use, but is also well suited for application servers. It has great performance, but also rich enterprise Java capabilities. It has efficient non-blocking reactive APIs, but also more familiar traditional blocking APIs. It has new innovative APIs, but also standard APIs. It can run large dynamic applications, but is also lightweight enough to replace a native web server.”

归纳来说就是三点:
1. 更好的满足JBoss应用服务器的集成需要。Tomcat最初设计于10年前,体系结构没有办法进行灵活的修改。在和JBoss应用服务器集成时,需要写大量的组合代码使得Tomcat和JBossAS协同工作。
2. 嵌入式需求。不论是JBoss应用服务器本身,还是目前微服务(MicroService)的设计倾向,都希望能够web容器足够小而精悍,可以嵌入使用,而Tomcat很难满足这个需要。
3. 支持Websocket协议需求和NIO,异步化思路等的促进。异步通信框架在并发连接数,性能的优异表现促使开发人员想重新按照新的思路来设计一款Web服务器。

Undertow的主力开发人员是Stuart Douglas,也是JBossAS的核心开发者,另外David M. Lloyd(JBossAS架构师)和Jason Greene(JBossAS技术领导人)也参与了设计和开发。

在Undertow刚发布beta版时,参加了由Techempower设计的著名框架集合性能测试竞赛,在纯文本EC2服务上一举拿下第一,而且比第二名netty多出近一倍!(http://www.techempower.com/benchmarks/#section=data-r6&hw=ec2&test=plaintext)这个不俗的成绩让人侧目。最新的测试结果显示,undertow依然名列前茅。

新出炉的Web服务器能获得这么好的成绩,和它采用的异步事件机制的内核架构是分不开的。我们知道目前有一款明星Java项目Netty,在互联网应用中广泛采用,比如Finagle, Akka, Vertx, Dubbo等。Undertow同样使用了异步IO,但不是Netty,而是一款同样源自JBoss的项目XNIO。Netty和XNIO有渊源,Netty的设计师Trustin Lee和XNIO的设计师David M. Lloyd原来都是JBossRemoting的项目成员。

我们简单说一下JBossRemoting,这个IO框架一直是JBoss应用服务器自带的通信框架,从3.X版本到今天的Wildfly8,它是JBoss服务器外部通信的基础组件,包括EJB,早先的JBossMessaging等。今天它依然是同步通信框架的设计典范和良好实现。

NIO是从Java1.4引入的,带来了新的异步设计方式,到Java7引入NIO2。Netty针对早期NIO的一些不足和缺陷,进行了极大的改进,包括性能和易用性,从而一举被广大互联网公司青睐。而XNIO一直不温不火,只在JBoss内部使用,直到undertow出现才被更多人知道。

要熟悉undertow,必须得了解其强依赖的XNIO和背后的NIO思想。所以这个文章分为三个部分,除了这一篇概述之外,还有专门介绍XNIO的一篇,以及Undertow自身一篇内容。

 

 

 

### 回答1: Undertow是一个用Java编写的轻量级Web服务器,它可以支持WebSocket协议。要在Undertow中使用WebSocket,首先需要创建一个WebSocket端点(WebSocketEndpoint),然后将其添加到Undertow的部署描述符(Deployment Descriptor)中。在客户端连接到WebSocket端点时,可以使用WebSocketSession对象来发送和接收消息。为了方便管理WebSocket会话,可以使用WebSocketSessionHandler类来处理WebSocket会话。这是一个基本的Undertow WebSocket实现的概述,具体实现细节可以参考Undertow官方文档。 ### 回答2: Undertow WebSocket是一种基于HTTP协议的双向通信机制,用于在Web浏览器和服务器之间建立实时的、持久的连接。它是在Undertow服务器框架上实现的,提供了一种简单、高效的方法来处理大量并发连接。 Undertow WebSocket允许服务器主动推送消息给浏览器,而不需要浏览器发送请求。这使得实时更新和通知成为可能,例如实时聊天、股票价格更新等。它采用基于事件的编程模型,当有新消息到达时,服务器会触发相应的事件,从而可以方便地处理和响应这些消息。 与传统的HTTP请求/响应模式不同,WebSocket连接是持久的,双向的。一旦建立连接,浏览器和服务器之间可以随时交换消息,而无需再次建立连接或发送新请求。这减少了不必要的网络开销,并且可以实时地传输数据。 Undertow WebSocket的另一个特性是支持多个子协议。子协议是一种在WebSocket连接上定义额外功能的扩展机制。它可以用于识别和处理不同类型的消息,以及在不同的应用中实现不同的行为。例如,可以定义一个子协议用于传输二进制数据,另一个子协议用于传输文本数据等。 总之,Undertow WebSocket提供了一种简单、高效的双向通信机制,可以用于实时更新和通知。它是在Undertow服务器框架上实现的,支持持久连接、基于事件的编程模型和多个子协议。在Web应用程序中,它为开发者提供了更强大的功能和更好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值