This commit is contained in:
Looly 2024-12-25 22:33:19 +08:00
parent 3a79f73927
commit ae7e3b76cb
4 changed files with 43 additions and 25 deletions

View File

@ -99,6 +99,7 @@ public class SmartHttpServerEngine extends AbstractServerEngine {
configuration.setHttpIdleTimeout((int) idleTimeout); configuration.setHttpIdleTimeout((int) idleTimeout);
} }
// 请求处理器
bootstrap.httpHandler(new HttpServerHandler() { bootstrap.httpHandler(new HttpServerHandler() {
@Override @Override
public void handle(final HttpRequest request, final HttpResponse response) { public void handle(final HttpRequest request, final HttpResponse response) {

View File

@ -32,6 +32,7 @@ import java.net.InetSocketAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/** /**
* 基于Sun HttpServer的HTTP服务器引擎实现 * 基于Sun HttpServer的HTTP服务器引擎实现
@ -116,7 +117,7 @@ public class SunHttpServerEngine extends AbstractServerEngine {
path = StrUtil.addPrefixIfNot(path, StrUtil.SLASH); path = StrUtil.addPrefixIfNot(path, StrUtil.SLASH);
final HttpContext context = this.server.createContext(path, handler); final HttpContext context = this.server.createContext(path, handler);
// 增加整体过滤器 // 增加整体过滤器
if(CollUtil.isNotEmpty(this.filters)){ if (CollUtil.isNotEmpty(this.filters)) {
context.getFilters().addAll(this.filters); context.getFilters().addAll(this.filters);
} }
return context; return context;
@ -144,6 +145,8 @@ public class SunHttpServerEngine extends AbstractServerEngine {
@Override @Override
protected void initEngine() { protected void initEngine() {
final ServerConfig config = this.config; final ServerConfig config = this.config;
// SSL
final InetSocketAddress address = new InetSocketAddress(config.getHost(), config.getPort()); final InetSocketAddress address = new InetSocketAddress(config.getHost(), config.getPort());
final SSLContext sslContext = config.getSslContext(); final SSLContext sslContext = config.getSslContext();
try { try {
@ -158,25 +161,37 @@ public class SunHttpServerEngine extends AbstractServerEngine {
throw new IORuntimeException(e); throw new IORuntimeException(e);
} }
// 线程池 // 线程池和连接配置
final int coreThreads = config.getCoreThreads(); setExecutor(createExecutor(config));
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(executorBuilder.build()); // 请求处理器
createContext("/", exchange -> SunHttpServerEngine.this.handler.handle( createContext("/", exchange -> handler.handle(
new SunServerRequest(exchange), new SunServerRequest(exchange),
new SunServerResponse(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();
}
} }

View File

@ -99,7 +99,7 @@ public class TomcatEngine extends AbstractServerEngine {
} }
/** /**
* 创建Connector * 创建Connector包括SSL配置
* *
* @return Connector * @return Connector
*/ */

View File

@ -66,14 +66,9 @@ public class UndertowEngine extends AbstractServerEngine {
if (null != this.undertow) { if (null != this.undertow) {
return; return;
} }
final Undertow.Builder builder = Undertow.builder() final Undertow.Builder builder = Undertow.builder();
.setHandler(exchange -> {
this.handler.handle(
new UndertowRequest(exchange),
new UndertowResponse(exchange));
});
final ServerConfig config = this.config; final ServerConfig config = this.config;
// 选项 // 选项
final int maxHeaderSize = config.getMaxHeaderSize(); final int maxHeaderSize = config.getMaxHeaderSize();
if(maxHeaderSize > 0){ if(maxHeaderSize > 0){
@ -96,6 +91,7 @@ public class UndertowEngine extends AbstractServerEngine {
builder.setWorkerThreads(maxThreads); builder.setWorkerThreads(maxThreads);
} }
// SSL配置
final SSLContext sslContext = config.getSslContext(); final SSLContext sslContext = config.getSslContext();
if(null != sslContext){ if(null != sslContext){
builder.addHttpsListener(config.getPort(), config.getHost(), sslContext); builder.addHttpsListener(config.getPort(), config.getHost(), sslContext);
@ -103,6 +99,12 @@ public class UndertowEngine extends AbstractServerEngine {
builder.addHttpListener(config.getPort(), config.getHost()); builder.addHttpListener(config.getPort(), config.getHost());
} }
// 请求处理器
builder.setHandler(exchange -> {
this.handler.handle(
new UndertowRequest(exchange),
new UndertowResponse(exchange));
});
this.undertow = builder.build(); this.undertow = builder.build();
} }
} }