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);
}
// 请求处理器
bootstrap.httpHandler(new HttpServerHandler() {
@Override
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.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();
}
}

View File

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

View File

@ -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();
}
}