网站首页 > 博客文章 正文
1、简介
Undertow是一个非常轻量并高性能的web server,它来自 JBoss。支持blocking和non-blocking两种NIO API。
由于它是用Java写的,所以它可以被那些JVM-based 的应用通过内嵌的方式来使用。甚至JBoss的WilfFly服务器在内部使用Undertow来提高服务器的性能。
在本文中,我们将介绍Undertow的主要功能并给出使用代码。
2. 为什么要选择Undertow?
轻量级:Undertow 是非常小的,只有不到1MB。在内嵌模式下,运行时只占heap空间的4MB左右。
Servlet 3.1:完美支持 Servlet 3.1
Web Socket:支持 Web Socket (包括JSR-356)
长连接:默认情况下 ,Undertow 通过添加keep-alive 的response header来支持长连接。它通过重用连接信息(connection details)来改善长连接的性能。
3. 使用Undertow
不多说,让我们使用Undertow来创建一个简单的web server吧!
3.1. Maven 依赖
加入如下依赖:
要构建一个可运行的jar,我们还需要添加一个maven-shade-plugin。像下面这样:
最新版的Undertow已经放到了maven 中央仓库,随便玩耍吧。
3.2. 简单的Server
仅仅需要下面的几行代码,就可以创建一个简单的web server,Undertow的入口使用的是Builder API。
这里我们使用Builder API把server绑定到8080端口上。同时我们使用了lambda表达式配置了一个handler。你也可以不用lambda表达式做同样的事情:
最主要的事情就是这里对HttpHandler API的使用。这个是根据我们的需要定制Undertow应用程序的最重要的武器。
在这里,我们添加了一个自定义的handler,逻辑就是让每个request都有一个Content-Type: text/plain response header。
欢迎访问我们的技术交流群650385180
同样的,如果你想让每个response都返回默认的text文本,你可以像下面这样来定义:
3.3.安全访问
在大多数情况下,我们不希望所有的用户都可以访问我们的server。通常,只有那些携带了合法“护照”的才可以访问。在Undertow上,我们同样可以实现这样的机制。
要想实现这个,我们只需要创建一个认证管理器,这个管理器会检查每个请求的用户信息。
下面我们就来实现一个自定义的IdentityManager:
一旦认证mananger被创建,我们需要创建一个“领地”来保存用户的信息。
这里我们使用了 AuthenticationMode.PRO_ACTIVE,表示每个来到这个server的请求都将会经过我们指定的认证机制来踊跃的进行认证。
如果我们使用了AuthenticationMode.CONSTRAINT_DRIVEN模式,那么只有那些被明确要求过滤的请求才会经过认证机制。
现在,我们只需要把保存用户信息的“领地”和认证管理器关联起来就可以了。
截止目前,我们已经创建了两个用户实例。一旦server启动了以后,要想访问,我们就需要使用这个两个证书才行。
3.4. Web Socket
使用Undertow的WebSocketHttpExchange API创建web socket exchange channel 同样非常简单。
下面,我们就打开一个socket通信channel,在/importsourceApp path上:
欢迎访问我们的技术交流群650385180
然后我们就可以创建一个HTML页面 index.html,然后使用js的WebSocket API来连接到这个channel上了。
3.5. File Server
使用Undertow,我们也可以创建一个文件服务器(file server),它可以显示目录内容,并直接从目录中提供文件:
你甚至都不需要穿件任何UI来显示目录。Undertow 为你提供了一个开箱即用的页面。
4. Spring Boot Plugin
Spring Boot把Undertow也内嵌进去了,作为继Tomcat和Jetty之后第三个内嵌的servlet 容器。要想在Spring Boot中使用Undertow只需要加下面的依赖就是了:
5. 总结
在本文中,我们了解了Undertow以及如何使用它创建不同类型的服务器。
猜你喜欢
- 2024-10-29 jfinal vue ElementUI OA HRM的前后端分离CRM系统源码免费分享
- 2024-10-29 如何项目性能优化?压力测试,数据分析,代码实战
- 2024-10-29 Spring Boot 3 使用 Java 17 和 Jakarta EE 9,并支持GraalVM 的原生 Java
- 2024-10-29 走进Spring Boot源码学习之路和浅谈入门
- 2024-10-29 7 种提升 Spring Boot 吞吐量神技
- 2024-10-29 教你Spring Boot 2.3 优雅关闭的新姿势
- 2024-10-29 拥抱Kubernetes,再见了Spring Cloud
- 2024-10-29 美团动态线程池实践思路,开源了(美团 线程池)
- 2024-10-29 Spring Boot性能优化:提高响应速度的秘密
- 2024-10-29 Java 9 和Spring Boot 2.0纷纷宣布支持的HTTP/2到底是什么?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)