ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎

Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎 用 Solon 做线上项目有一阵子了有个点总让新接触的人觉得意外服务器引擎是让你选的。Solon 内核约 0.3MB不内置固定的 HTTP 服务器。HTTP 引擎是一个独立插件。你选一个或者选两个不同环境之间切换一行应用代码都不用改。下面快速过一下 10 种 HTTP 服务器选项各自适合什么场景以及怎么切换。一行依赖替换在 Solon 里换 HTTP 服务器就是改pom.xml里一个依赖别的什么都不用动。dependencygroupIdorg.noear/groupIdartifactIdsolon-web/artifactId/dependency想换成 UndertowdependencygroupIdorg.noear/groupIdartifactIdsolon-web/artifactIdexclusionsexclusiongroupIdorg.noear/groupIdartifactIdsolon-server-smarthttp/artifactId/exclusion/exclusions/dependencydependencygroupIdorg.noear/groupIdartifactIdsolon-server-undertow/artifactId/dependency就这些。你的Controller、Mapping(/hello)、过滤器、拦截器 — 全部不变。路由层是框架自己的底层的服务器是一个可插拔的适配器。10 种引擎速览插件大小协议响应式JDKsolon-server-jdkhttp0.3MBhttp✅8solon-server-smarthttp0.8MBhttp, ws✅8solon-server-grizzly1.8MBhttp, ws, http2✅8solon-server-vertx6.3MBhttp, ws, http2✅8solon-server-jetty2.7MBhttp, ws✅8solon-server-undertow4.6MBhttp, ws, http2✅8solon-server-tomcat—http, ws, http2✅8solon-server-jetty-jakarta3.9MBhttp, ws, http2✅17solon-server-undertow-jakarta—http, ws, http2✅17solon-server-tomcat-jakarta—http, ws, http2✅17另外还有两个专门的 WebSocket 服务器solon-server-websocketsolon-server-websocket-netty和一个 Socket.D 服务器。怎么选微服务和边缘服务jdkhttp 或 smarthttp搭轻量 API 服务或需要一秒内启动的微服务用jdkhttp。零外部依赖支持响应式 I/O。JDK 自带的com.sun.net.httpserver应付大多数 API 场景绰绰有余。smarthttp国产贡献在同一个端口上加了 WebSocket 支持 — 如果既需要 REST 又需要 WebSocket又不想多开一个服务器挺实用。SolonMainpublicclassApp{publicstaticvoidmain(String[]args){Solon.start(App.class,args,app-{app.enableWebSocket(true);});}}需要 HTTP/2grizzly、undertow、vertx、tomcat这四个都支持 HTTP/2。一行代码开启app.onEvent(HttpServerConfigure.class,e-{e.enableHttp2(true);// v2.3.8});Undertow 是个不错的折中 — 4.6MBApache 2.0 协议社区活跃。Vert.x 更重6.3MB但如果你已经在用 Vert.x 生态那全套事件循环体系也是加分项。传统 Java 团队Jetty 或 Tomcat如果团队从 Spring Boot 内嵌 Tomcat 迁移过来solon-server-tomcat是最自然的替换。底层仍然是 Tomcat v9 引擎 — 运维团队已有的调优经验直接复用。Jetty 是 Eclipse 生态的好选择还通过solon-server-jetty-add-jsp显式支持 JSP。Jakarta EE 迁移jetty-jakarta、undertow-jakarta、tomcat-jakartaJDK 17 且目标命名空间是jakarta.*的用 Jakarta 变体。对应 Jakarta 服务器版本分别是 Jetty 12、Undertow 2.3、Tomcat 11。永远不变的应用代码这是我个人最喜欢的一点。不管你选哪个服务器引擎应用代码完全一样ControllerpublicclassDemoController{Mapping(/hello)publicStringhello(){returnHello world!;}Mapping(/greet/{name})publicStringgreet(Stringname){return你好name;}}同一段代码跑在 jdkhttp0.3MB无依赖、Undertow4.6MBHTTP/2或 Tomcat生产级上零改动。进阶多端口、SSL 与调试模式所有服务器适配器共享一套配置接口# app.ymlserver.port:8080server.ssl.keyStore:/data/ca/demo.jksserver.ssl.keyPassword:demo或者编程式配置Solon.start(App.class,args,app-{// 加第二个 HTTP 端口主端口走 HTTPS 时有用app.onEvent(HttpServerConfigure.class,e-{e.addHttpPort(8082);e.enableDebug(true);// smarthttp/jdkhttp 调试模式});});自定义 SSLContextv2.5.9app.onEvent(HttpServerConfigure.class,e-{SSLContextsslContextbuildMyCustomSSLContext();e.enableSsl(true,sslContext);});默认到底是什么如果你只加了solon-web没做任何排除Solon 默认用smarthttp— 国产开源服务器。可覆盖 99% 的开发场景。线上可能需要更调优的方案。但妙就妙在你不用第一天就做决定。先用默认起步跑基准测试等有特别需要了再换 Undertow 或 Tomcat — 全程不用改一条路由。总结Solon 的可插拔服务器架构纸上看起来是个小特性实际用起来差别很大。一行依赖替换零代码影响从 0.3MB 到全功能生产服务器的完整光谱。需求推荐最轻量的 API 服务器jdkhttp0.3MB同端口 REST WebSocketsmarthttp0.8MBHTTP/2 均衡性能undertow4.6MBSpring Boot 迁移tomcat响应式事件循环vert.x 或 grizzlyJakarta EEJDK 17jetty-jakarta / undertow-jakarta独立 WebSocket 服务solon-server-websocket0.4MB服务器是基础设施。框架是你的代码。Solon 把它们分开 — 这是好事。
返回列表