diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/smart/SmartHttpServerEngine.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/smart/SmartHttpServerEngine.java index ece3082dc..22724308a 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/smart/SmartHttpServerEngine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/smart/SmartHttpServerEngine.java @@ -99,6 +99,7 @@ public class SmartHttpServerEngine extends AbstractServerEngine { configuration.setHttpIdleTimeout((int) idleTimeout); } + // 请求处理器 bootstrap.httpHandler(new HttpServerHandler() { @Override public void handle(final HttpRequest request, final HttpResponse response) { diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunHttpServerEngine.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunHttpServerEngine.java index 016d13a1e..49d26a86f 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunHttpServerEngine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/sun/SunHttpServerEngine.java @@ -32,6 +32,7 @@ import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; /** * 基于Sun HttpServer的HTTP服务器引擎实现 @@ -116,7 +117,7 @@ public class SunHttpServerEngine extends AbstractServerEngine { path = StrUtil.addPrefixIfNot(path, StrUtil.SLASH); final HttpContext context = this.server.createContext(path, handler); // 增加整体过滤器 - if(CollUtil.isNotEmpty(this.filters)){ + if (CollUtil.isNotEmpty(this.filters)) { context.getFilters().addAll(this.filters); } return context; @@ -144,6 +145,8 @@ public class SunHttpServerEngine extends AbstractServerEngine { @Override protected void initEngine() { final ServerConfig config = this.config; + + // SSL final InetSocketAddress address = new InetSocketAddress(config.getHost(), config.getPort()); final SSLContext sslContext = config.getSslContext(); try { @@ -158,25 +161,37 @@ public class SunHttpServerEngine extends AbstractServerEngine { throw new IORuntimeException(e); } - // 线程池 - final int coreThreads = config.getCoreThreads(); - final ExecutorBuilder executorBuilder = ExecutorBuilder.of(); - if(coreThreads > 0){ - executorBuilder.setCorePoolSize(coreThreads); - } - final int maxThreads = config.getMaxThreads(); - if(maxThreads > 0){ - executorBuilder.setMaxPoolSize(maxThreads); - } - final long idleTimeout = config.getIdleTimeout(); - if(idleTimeout > 0){ - executorBuilder.setKeepAliveTime(idleTimeout); - } + // 线程池和连接配置 + setExecutor(createExecutor(config)); - setExecutor(executorBuilder.build()); - createContext("/", exchange -> SunHttpServerEngine.this.handler.handle( + // 请求处理器 + createContext("/", exchange -> handler.handle( new SunServerRequest(exchange), new SunServerResponse(exchange) )); } + + /** + * 创建线程池 + * + * @param config {@link ServerConfig} + * @return {@link ThreadPoolExecutor} + */ + private static ThreadPoolExecutor createExecutor(final ServerConfig config) { + final ExecutorBuilder executorBuilder = ExecutorBuilder.of(); + // 线程池 + final int coreThreads = config.getCoreThreads(); + if (coreThreads > 0) { + executorBuilder.setCorePoolSize(coreThreads); + } + final int maxThreads = config.getMaxThreads(); + if (maxThreads > 0) { + executorBuilder.setMaxPoolSize(maxThreads); + } + final long idleTimeout = config.getIdleTimeout(); + if (idleTimeout > 0) { + executorBuilder.setKeepAliveTime(idleTimeout); + } + return executorBuilder.build(); + } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/tomcat/TomcatEngine.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/tomcat/TomcatEngine.java index 355d7b8d4..297404c3b 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/tomcat/TomcatEngine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/tomcat/TomcatEngine.java @@ -99,7 +99,7 @@ public class TomcatEngine extends AbstractServerEngine { } /** - * 创建Connector + * 创建Connector,包括SSL配置 * * @return Connector */ diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowEngine.java b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowEngine.java index b074c9a78..146ad5372 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowEngine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/server/engine/undertow/UndertowEngine.java @@ -66,14 +66,9 @@ public class UndertowEngine extends AbstractServerEngine { if (null != this.undertow) { return; } - final Undertow.Builder builder = Undertow.builder() - .setHandler(exchange -> { - this.handler.handle( - new UndertowRequest(exchange), - new UndertowResponse(exchange)); - }); - + final Undertow.Builder builder = Undertow.builder(); final ServerConfig config = this.config; + // 选项 final int maxHeaderSize = config.getMaxHeaderSize(); if(maxHeaderSize > 0){ @@ -96,6 +91,7 @@ public class UndertowEngine extends AbstractServerEngine { builder.setWorkerThreads(maxThreads); } + // SSL配置 final SSLContext sslContext = config.getSslContext(); if(null != sslContext){ builder.addHttpsListener(config.getPort(), config.getHost(), sslContext); @@ -103,6 +99,12 @@ public class UndertowEngine extends AbstractServerEngine { builder.addHttpListener(config.getPort(), config.getHost()); } + // 请求处理器 + builder.setHandler(exchange -> { + this.handler.handle( + new UndertowRequest(exchange), + new UndertowResponse(exchange)); + }); this.undertow = builder.build(); } }