🎉Feat v2.2.0 发布:像 SpringBoot 一样好写,比 Vert.x 快两倍
先给第一次了解 Feat 的朋友一句话介绍: Feat 是一款国产 Java Web 框架,开发体验近似 Spring Boot,运行速度远超 Vert.x 集成自研 smart-socket 引擎,支持 HTTP/2、WebSocket,编译期生成代码零反射,启动快、内存小、吞吐量高。 前段时间我们发了篇文章《Spring Boot 内嵌 Tomcat,是进步还是退步?》,评论区那叫一个热闹。 有人说 Spring Boot 太重了,有人说 Tomcat 已经够用了,还有人认为包体积轻不轻量化无所谓,性能才是硬道理。 好,那今天咱们就聊点硬核的——Feat v2.2.0 正式发布,看看 smart-servlet 的 web 内核在性能上到底能有多刚。 一、这次最狠的更新:我们把 Servlet 的"义肢"给拆了 先划重点,这条更新比其他所有功能加起来都重要: ReadListener 和 WriteListener 标记为已弃用,该功能仅用于适配 Jakarta Servlet 规范。 如果你看过我之前写的《Servlet 的三宗罪:Spring 的崛起,可能就是被它逼出来的》,应该对这段话有印象: "Servlet 的线程模型从骨子里就是'一个请求,一个线程',AsyncContext 只是想办法把容器线程提前释放出去,但编程模型依然是笨重的回调式……ReadListener / WriteListener 更典型——一种'轮询式异步',每次写之前都要先问一句'我现在能写吗',这种设计放在 2014 年看都已经显得落后于时代。" 现在,我们在 Feat 里把它正式标记为 Deprecated。 这不是为了标新立异。而是我们越来越确定一件事:一个规范如果连自己的官方生态都不愿意用(Spring WebFlux 直接绕开 Servlet API 另起炉灶),那它留着的唯一意义,可能就是给后来者提个醒——该删了。 Feat 从设计之初就不是 Servlet 的模仿者。我们保留这些接口,只是为了给迁移中的项目一个缓冲。但"兼容"不等于"认同",该画的线终究要画。 二、其他值得关注的更新 HTTP 客户端增强 • 新增 HttpOptions#maxConnections,支持配置 HTTP 连接池最大连接数 • 优化 HTTP 客户端长连接判定逻辑 HTTP/2 优化 • 优化推送请求中的 Cookie 处理逻辑 Server 稳定性 • 修复 upgrade 场景下解码异常的问题 Feat Cloud / AOT • 支持 feat.yml / feat-{env}.yml 多环境配置生成(社区用户强烈反馈的需求,终于安排上了!) 底层升级 • smart-socket 升级至 2.1.2 三、性能测试:Feat 把 Vert.x 按在地上摩擦 好了,最激动人心的部分来了。 我们拿 Feat、Vert.x 和 Spring Boot 三个框架做了横向对比,测试工具用的 wrk,场景是 Hello World 和 JSON 响应。 测试参数:4 线程,100 连接,持续 60 秒,开启延迟统计。 测试场景 Feat Vert.x Spring Boot Hello World 吞吐 155,939 RPS 82,268 RPS 49,905 RPS Hello World 延迟 0.79 ms 1.43 ms 3.60 ms JSON 响应吞吐 155,973 RPS 77,212 RPS 44,617 RPS JSON 响应延迟 0.82 ms 1.54 ms 2.27 ms Feat 的吞吐量约为 Vert.x 的 2 倍。 你没看错,是两倍。延迟更是低得离谱——Hello World 场景下只有 0.79ms,连 1 毫秒都不到。 测试代码全部开源在 Feat 仓库,测试环境为 GitHub Actions,欢迎复现。 快速开始 使用 Feat Cloud 创建一个简单的注解式 Web 应用: import tech.smartboot.feat.cloud.FeatCloud; import tech.smartboot.feat.cloud.annotation.Controller; import tech.smartboot.feat.cloud.annotation.RequestMapping; @Controller public class HelloWorld { @RequestMapping("/hello") public String hello() { return "Hello, World!"; } public static void main(String[] args) { FeatCloud.cloudServer().listen(); } } Maven 依赖: <!-- 运行期依赖 --> <dependency> <groupId>tech.smartboot.feat</groupId> <artifactId>feat-cloud</artifactId> <version>2.2.0</version> </dependency> <!-- 编译期转码 --> <dependency> <groupId>tech.smartboot.feat</groupId> <artifactId>feat-cloud-starter</artifactId> <version>2.2.0</version> <scope>provided</scope> </dependency> 写在最后 Feat 从诞生到今天,并不是为了证明某个框架不好。 我们真正想回答的是另一个问题: 如果今天重新设计一套 Java Web 框架,它应该是什么样子? 我们的答案是: 保留 Spring Boot 那样成熟、易用的开发体验; 不再依赖 Servlet 的历史设计; 尽可能把工作放到编译期完成,而不是运行期; 用更少的资源,支撑更高的性能。 这也是 Feat 一直坚持的发展方向。 v2.2.0 并不是终点,而是这个方向上的又一步。 如果你正在寻找一种不同于传统 Servlet 架构的 Java Web 开发方式,欢迎体验 Feat,也欢迎提出 Issue、参与 PR,一起把它做得更完善。 GitHub 地址:https://github.com/smartboot/feat 官方文档:https://smartboot.tech/feat